{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "ee777cf5",
   "metadata": {},
   "source": [
    "# 一、概述"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0508c638",
   "metadata": {},
   "source": [
    "## 1. 正确率、精确度和召回率"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e9a420df",
   "metadata": {},
   "source": [
    "<img src='img/correct.jpg' width='600px'/>\n",
    "\n",
    "***\n",
    "\n",
    "<img src='img/complain.jpg' width='600px'/>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6089d966",
   "metadata": {},
   "source": [
    "## 2.F1 score 和 ROC 曲线"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "26b7c4ff",
   "metadata": {},
   "source": [
    "1. **F1值**\n",
    "\n",
    "* 由于存在精确率和召回率两个指标，对于多个模型来说，这两个指标差不多的情况下难以判断那个更好，于是出现了`F1值`。\n",
    "* 如果两个样本的精确度与召回率分别是：0.6，0.6 与 0.5,0.7， 那么哪个更好呢？\n",
    "* 于是科学家有定义了一个指标去计算——F score,常见的是 F1 score。\n",
    "    * F1 score 是精确值和召回率的调和均值\n",
    "    * <img src='img/F1.jpg' width='600px'/>\n",
    "    * F1 score 越大，模型效果相对要越好"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0a0d277c",
   "metadata": {},
   "source": [
    "*******\n",
    "***\n",
    "2. **ROC 曲线**\n",
    "* ROC 的全称是 Receiver Operating Characteristic Curve，中文名字叫“受试者工作特征曲线”。\n",
    "* 顾名思义，其主要的分析方法就是画这条特征曲线\n",
    "    * 可以看到该曲线的横坐标为假阳性率 ( False Positive Rate,FPR)\n",
    "        * `负例分错的概率 = FP/(FP+TN) `\n",
    "        * 俗称假警报率\n",
    "    * 可以看到该曲线的横坐标为真阳性率 ( True Positive Rate,TPR)\n",
    "        * `正例分对的概率 = TP/(TP+FN) = TP/P `\n",
    "        * 其实就是查全率（召回率 Recall） \n",
    "        * 预测对的正例占真正的正例数的比率\n",
    "    * <img src='img/ROC.png' width='400px'/>\n",
    "    \n",
    "    \n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a8f3a796",
   "metadata": {},
   "source": [
    "* 首先了解一下ROC曲线图上很重要的四个点：\n",
    "\n",
    "    * 第一个点( 0 , 1 ) ，即FPR=0, TPR=1，这意味着FN（False Negative）=0，并且FP（False Positive）=0。意味着这是一个完美的分类器，它将所有的样本都正确分类。\n",
    "    * 第二个点( 1 , 0 ) ，即FPR=1，TPR=0，意味着这是一个糟糕的分类器，因为它成功避开了所有的正确答案。\n",
    "    * 第三个点( 0 , 0 ) ，即FPR=TPR=0，即FP（False Positive）=TP（True Positive）=0，可以发现该分类器预测所有的样本都为负样本（Negative）。\n",
    "    * 第四个点( 1 , 1 ) ，即FPR=TPR=1，分类器实际上预测所有的样本都为正样本。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c82681d4",
   "metadata": {},
   "source": [
    "        如果是随机分类（比如投掷硬币），没有进行任何学习器，FPR = TPR, 即正例分对和负例分错的概率相同，预测出来的正例负例和正例负例本身的分布是一致的，所以是一条 45°的直线。\n",
    "        因此，ROC 曲线越向上远离这条 45°直线，说明用了这个学习器在很小的代价（负例分错为横线，横轴）下达到了相对较大的查全率。\n",
    "        \n",
    "**TPR 越大越好\n",
    "FPR 越小越好**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "29e67ff4",
   "metadata": {},
   "source": [
    "# 二、 数据预处理\n",
    "## 1.数据的预处理，常用的处理原则和方法：\n",
    "**（1）针对数据缺失的问题**，虽然可以选择直接删除，但是容易引发问题，常用的方法是所在列的均值填充。\n",
    "\n",
    "**（2）不属于同一量纲**，即数据的规格不一样，不能放在一起比较。\n",
    "\n",
    "**（3）对于某些定量数据**，其包含的有效信息为区间划分，例如学习成绩，只关心“及格”或“不及格”，转化为“1”和“0”来表示。**二值化**解决这个问题。\n",
    "\n",
    "**（4）大部分机器学习算法要求输入的数据必须是数字，不能是字符串**。需要将描述变量转化为数字型变量，因为大部分算法无法直接处理描述变量。\n",
    "\n",
    "**（5）某些算法对数据归一化敏感，标准化可大大提升模型的精确度**。**`标准化`** 即将样本缩放到指定的范围，标准化可消除样本间不同量级带来的影响。\n",
    "\n",
    "        （大数量级的特征占据主导地位；量级的差异将导致迭代收敛速度减慢；所有依赖于样本距离的算法对数据的量级都非常敏感）\n",
    "        \n",
    "**（6）** 在数据集中，样本往往会有很多特征，**并不是所有特征都有用**，只有一些关键的特征对预测结果起决定作用。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fc3cda15",
   "metadata": {},
   "source": [
    "1. **步骤如下：**\n",
    "    1. 首先要明确有多少特征，哪些是连续的特征，哪些是类别的特征\n",
    "    2. 检查有没有**缺失值**，对确实的特征选择恰当方式进行弥补，使数据完整\n",
    "    3. 对连续的数值型特征进行标准化，使得均值为 0，方差为 1 。\n",
    "    4. 对类别型的特征进行独热编码（One-Hot Encoding）\n",
    "    5. 将需要转化成类别型数据的连续型数据进行二值化。\n",
    "    6. 为防止过拟合或其他原因，选择是否要将数据进行正则化。\n",
    "\n",
    "2. 数据预处理的工具有许多，主要有两种：\n",
    "    1. Pandas 数据预处理\n",
    "    2. scikit-learn 中的 sklearn.preprocessing 预处理"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d04592ab",
   "metadata": {},
   "source": [
    "## 1.1 数据预处理案例 —— 标准化、归一化、二值化"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b64bd2f6",
   "metadata": {},
   "source": [
    "将不同规格的数据转换到同一规格中用，或将不同分布的数据转换到某个特定分布中，这些需求通常曾为将数据“**无量纲化**”\n",
    "\n",
    "标准化则是将数据按照比例缩放，使之放到一个特定区间中，标准化后的数据均值=0，标准差=1，因而标准化的数据可正可负，只不过归一化是将数据映射到了 [0,1] 这个区间中。\n",
    "\n",
    "* 在大多数机器学习算法中，会选择 `StandardScaler ` 来进行特征缩放，因为 `MinMaxScaler `对异常值非常敏感。\n",
    "\n",
    "    * 在  ***PCA、聚类、逻辑回归、支持向量机、神经网络*** 这些算法中，`StandardScaler`往往是最好的选择。\n",
    "\n",
    "\n",
    "* `MinMaxScaler `在不涉及 ***距离度量、梯度、协方差计算***以及 ***数据需要被压缩到特定区间*** 的情况下使用广泛。\n",
    "    * 例如 ***数字图像处理中量化像素强度时***，都会使用 MinMaxScaler 将数据压缩于 [0,1] 区间之间\n",
    "    \n",
    "* `Binarizer`&`LabelBinarizer` 对数据进行二值化处理，0或1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "744562af",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "原始数据：\n",
      "[[ 3.  -1.7  3.5 -6. ]\n",
      " [ 0.   4.  -0.3  2.5]\n",
      " [ 1.   3.5 -1.8 -4.5]]\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "data = np.array([[3,-1.7,3.5,-6],\n",
    "               [0,4,-0.3,2.5],\n",
    "               [1,3.5,-1.8,-4.5]])\n",
    "print('原始数据：')\n",
    "print(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "73bb37c8",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import StandardScaler"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "de33c315",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "原始数据使用 StandardScaler 进行数据标准化处理后：\n",
      "[[ 1.33630621 -1.4097709   1.35987612 -0.89984254]\n",
      " [-1.06904497  0.80188804 -0.34370495  1.39475594]\n",
      " [-0.26726124  0.60788287 -1.01617117 -0.4949134 ]]\n"
     ]
    }
   ],
   "source": [
    "data_standardscaler = StandardScaler().fit_transform(data)\n",
    "print('原始数据使用 StandardScaler 进行数据标准化处理后：')\n",
    "print(data_standardscaler)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "550bfc9d",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import MinMaxScaler"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "a05634fb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "原始数据使用 MinMaxScaler 进行归一化处理（范围缩放到[0,1]）后：\n",
      "[[1.         0.         1.         0.        ]\n",
      " [0.         1.         0.28301887 1.        ]\n",
      " [0.33333333 0.9122807  0.         0.17647059]]\n"
     ]
    }
   ],
   "source": [
    "data_minmaxscaler = MinMaxScaler(feature_range=(0,1)).fit_transform(data)\n",
    "print('原始数据使用 MinMaxScaler 进行归一化处理（范围缩放到[0,1]）后：')\n",
    "print(data_minmaxscaler)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "bf241caa",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import Binarizer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "bc442fe9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "原始数据使用 Binarizer 进行二值化处理后：\n",
      "[[1. 0. 1. 0.]\n",
      " [0. 1. 0. 1.]\n",
      " [1. 1. 0. 0.]]\n"
     ]
    }
   ],
   "source": [
    "# data中大于0的转换为1，小于0的转换为 0\n",
    "data_binarizer = Binarizer().fit_transform(data)\n",
    "print('原始数据使用 Binarizer 进行二值化处理后：')\n",
    "print(data_binarizer)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "026d34d0",
   "metadata": {},
   "source": [
    "## 1.2数据预处理案例 —— 缺失值补全、标签化\n",
    "\n",
    "SKImputer 类能够提供一些处理缺失值的基本策略，比如使用整行数据的平均值或中位数来替换丢失的数据\n",
    "<img src='img/imputer.jpg' width='400px'/>\n",
    "\n",
    "\n",
    "Label Encoder 就是把 label 编码。比如 label 是一串地名，无法直接输入的 sklearn 的分类模型里作为训练标签， 所以需要先把地名转换成数字。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "2c7b5c15",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "############ 缺失值补全 ###########\n",
      "[[nan, 2], [6, nan], [7, 6]]\n",
      "[[4.         2.        ]\n",
      " [6.         3.66666667]\n",
      " [7.         6.        ]]\n",
      "#### LabelEncoder_ 标准化标签，将标签值统一转化成range(标签值个数-1)范围内：####\n",
      "['Japan', 'China', 'Japan', 'Korea', 'China', 'America']\n",
      "标签个数：['America' 'China' 'Japan' 'Korea']\n",
      "标签值标准化：[2 1 2 3 1 0]\n",
      "['Japan', 'China', 'China', 'Korea', 'Korea']\n",
      "标签值标准化：[2 1 1 3 3]\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from sklearn.impute import SimpleImputer\n",
    "print('############ 缺失值补全 ###########')\n",
    "imp = SimpleImputer(missing_values=np.nan,strategy = 'mean')\n",
    "# 训练模型，拟合出作为替换值的均值\n",
    "imp.fit([[1,2],[np.nan,3],[7,6]])\n",
    "x = [[np.nan,2]\n",
    "    ,[6,np.nan]\n",
    "     ,[7,6]]\n",
    "print(x)\n",
    "# 处理需要补全的数据\n",
    "\n",
    "# 第一列：(1+7)/2=4\n",
    "# 第二列：(2+3+6)/3\n",
    "print(imp.transform(x))\n",
    "\n",
    "print('#### LabelEncoder_ 标准化标签，将标签值统一转化成range(标签值个数-1)范围内：####')\n",
    "\n",
    "from sklearn import preprocessing\n",
    "data=['Japan','China','Japan','Korea','China','America']\n",
    "print(data)\n",
    "\n",
    "le = preprocessing.LabelEncoder()\n",
    "le.fit(data)  \n",
    "'''\n",
    "得到：\n",
    "按照》le.classes_标签个数：['China' 'Japan' 'Korea']》》排列（字母表顺序）\n",
    "0：China\n",
    "1: Japan\n",
    "2: Korea\n",
    "'''\n",
    "# ['Japan', 'China', 'Japan', 'Korea', 'China']\n",
    "# =====>>>[1 0 1 2 0]\n",
    "print('标签个数：%s'%le.classes_)\n",
    "print('标签值标准化：%s'%le.transform(data))\n",
    "\n",
    "data2=['Japan','China','China','Korea','Korea']\n",
    "print(data2)\n",
    "\n",
    "\n",
    "#输出：[1,0,0,2,2]\n",
    "print('标签值标准化：%s'%le.transform(data2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "823c4817",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1. 7.]\n",
      " [4. 8.]\n",
      " [7. 6.]]\n"
     ]
    }
   ],
   "source": [
    "imp2 = SimpleImputer(missing_values=np.nan,strategy='mean')\n",
    "x = [[np.nan,2]\n",
    "    ,[6,np.nan]\n",
    "     ,[7,6]]\n",
    "print(imp2.fit_transform([[1,np.nan],[np.nan,8],[7,6]]))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2ca33d4b",
   "metadata": {},
   "source": [
    "## 1.3数据预处理案例 —— 独热编码\n",
    "* 对于离散的、无需的分类特征的数据：人的性别有男女、祖国有中国、美国、法国。\n",
    "* 我们通常需要 对其进行 **`特征数字化`**\n",
    "* 解决方法：独热编码（One-Hot Encoding）\n",
    "\n",
    "#### 独热编码（One-Hot Encoding）\n",
    "1. 又称为一位有效编码\n",
    "2. 其方法是使用 N 个`状态寄存器`来对 N 个状态进行编码，每个状态都有它独立的`寄存器位`\n",
    "3. 并且在任意时候，其中只有一位有效。\n",
    "4. 并且，这些特征互斥，每次只有一个激活，\n",
    "**因此数据会变成稀疏的数据**\n",
    "\n",
    "        可以这样理解，对于每一个特征，如果它有 m个 可能值，那么经过独热编码后，就变成了 m个二元特征（如成绩这个特征有好、中、差，变成独热编码就是100,010,001）\n",
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ff2dd44f",
   "metadata": {},
   "source": [
    "1. **举个例子：**\n",
    "    1. 性别的特征：[\"男\",\"女\"]\n",
    "    2. 国家的特征：['中国','美国','法国']\n",
    "    3. 体育运动的特征：['足球','篮球','羽毛球','乒乓球']\n",
    "\n",
    "\n",
    "2. **假设某个人的特征：['女','中国','羽毛球']**\n",
    "*将其数字化？\n",
    "\n",
    "\n",
    "3. **独热编码做法：**\n",
    "    * 性别的特征：[\"男\",\"女\"]   :: N=2\n",
    "        * 男 => 10\n",
    "        * 女 => 01\n",
    "        \n",
    "    * 国家的特征：['中国','美国','法国']  :: N=3\n",
    "        * 中国 => 100\n",
    "        * 美国 => 010\n",
    "        * 法国 => 001\n",
    "        \n",
    "    * 体育运动的特征：['足球','篮球','羽毛球','乒乓球']  :: N=4\n",
    "        * 足球 => 1000\n",
    "        * 篮球 => 0100\n",
    "        * 羽毛球 => 0010\n",
    "        * 乒乓球 => 0001\n",
    "        \n",
    "        \n",
    "4. **结果:** 所以样本为['女','中国','羽毛球'] =>[0,1,1,0,0,0,0,1,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "b9986cb6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "数据矩阵时 4*3，即 4个数据， 3个特征维度\n",
      "[[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]\n",
      "再来看要进行编码的参数：\n",
      "[[0, 1, 3]]\n",
      "onehot编码的结果\n",
      "  (0, 0)\t1.0\n",
      "  (0, 3)\t1.0\n",
      "  (0, 8)\t1.0\n",
      "[[1. 0. 0. 1. 0. 0. 0. 0. 1.]]\n",
      "  (0, 0)\t1.0\n",
      "  (0, 3)\t1.0\n",
      "  (0, 8)\t1.0\n"
     ]
    }
   ],
   "source": [
    "from sklearn import preprocessing\n",
    "enc = preprocessing.OneHotEncoder()\n",
    "data = [[0,0,3]\n",
    "       ,[1,1,0]\n",
    "       ,[0,2,1]\n",
    "       ,[1,0,2]]\n",
    "print('数据矩阵时 4*3，即 4个数据， 3个特征维度')\n",
    "print(data)\n",
    "enc.fit(data)\n",
    "x = [[0,1,3]]\n",
    "print('再来看要进行编码的参数：')\n",
    "print(x)\n",
    "print('onehot编码的结果')\n",
    "# [1,0,0,1,0,0,0,0,1]\n",
    "print(enc.transform(x))\n",
    "'''\n",
    "如果不加 toarray() 的话，输出的是稀疏的存储格式，即索引加值的形式，也可以通过参数指定 sparse = False 来达到同样的效果\n",
    "'''\n",
    "print(enc.transform(x).toarray())\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "9b4693b9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1. 0. 0. 1. 0. 0. 0. 0. 1.]\n",
      " [0. 1. 1. 0. 0. 0. 0. 1. 0.]]\n"
     ]
    }
   ],
   "source": [
    "enc2 = preprocessing.OneHotEncoder(sparse = False)\n",
    "data = [[0,0,3]\n",
    "       ,[1,1,0]\n",
    "       ,[0,2,1]\n",
    "       ,[1,0,2]]\n",
    "enc2.fit(data)\n",
    "x = [[0,1,3]\n",
    "    ,[1,0,2]]\n",
    "x_enc2 = enc2.transform(x)\n",
    "print(x_enc2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ca80f496",
   "metadata": {},
   "source": [
    "## 通过数据预处理提高模型准确率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "9be8916b",
   "metadata": {},
   "outputs": [],
   "source": [
    "import warnings\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ba971a5b",
   "metadata": {},
   "source": [
    "数据预处理的意义究竟有多大，我们使用酒的数据集来测试一下，这里使用多层神经网络模型。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "d295c9a6",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导入红酒数据集\n",
    "from sklearn.datasets import load_wine\n",
    "# 导入 MLP 多层神经网络\n",
    "from sklearn.neural_network import MLPClassifier\n",
    "# 导入数据集拆分工具\n",
    "from sklearn.model_selection import train_test_split"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "9d6dc52d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(133, 13) (45, 13)\n",
      "数据没有经过预处理模型得分:0.93\n",
      "数据预处理后的模型得分:1.000000\n"
     ]
    }
   ],
   "source": [
    "# 红酒数据集\n",
    "wine = load_wine()\n",
    "X_train,X_test,y_train,y_test = train_test_split(wine.data,\n",
    "                                                 wine.target,\n",
    "                                                 random_state=62)\n",
    "print(X_train.shape,X_test.shape)\n",
    "# 隐层的输入输出为100,100\n",
    "mlp = MLPClassifier(hidden_layer_sizes=[100,100],max_iter=400,\n",
    "                   random_state=62)\n",
    "mlp.fit(X_train,Y_train)\n",
    "print('数据没有经过预处理模型得分:{:.2f}'.format(mlp.score(X_test,Y_test)))\n",
    "\n",
    "# #############################\n",
    "\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "\n",
    "scaler = MinMaxScaler()\n",
    "# 因为要对 X_train 和 X_test 都进行预处理，所以先以X_train 为缩放标准\n",
    "scaler.fit(X_train)\n",
    "X_train_pp = scaler.transform(X_train)\n",
    "X_test_pp = scaler.transform(X_test)\n",
    "mlp.fit(X_train_pp,y_train)\n",
    "print('数据预处理后的模型得分:{:.6f}'.format(mlp.score(X_test_pp,y_test)))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4388b7ba",
   "metadata": {},
   "source": [
    "## 3.数据降维"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dc0b4105",
   "metadata": {},
   "source": [
    "* 降维是一种为高纬度特征数据预处理的方法。\n",
    "\n",
    "\n",
    "* 它将高纬度的数据保留下最重要的一些特征，去除噪声和不重要的特征，从而实现提升数据处理速度的目的。\n",
    "\n",
    "\n",
    "* 在实际生产和应用中，降维在一定的信息损失范围内，可以为我们节省大量的时间和成本。\n",
    "\n",
    "\n",
    "* 降维也成为应用非常广泛的数据预处理方法。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3fdaf742",
   "metadata": {},
   "source": [
    "### 3.1. PCA 主成分分析原理\n",
    "\n",
    "        PCA 的主要思想是将 n 维特征映射到 k 维上，这 k 维是全新的正交特征，也被称为主成分，是在原有 n 维特征的基础上重新构造出来的 k 维特征。\n",
    "\n",
    "<br>\n",
    "\n",
    "1. PCA 主成分分析是一种用于探索高纬度数据的技术。\n",
    "\n",
    "\n",
    "2. PCA 可以把可能具有线性相关性的高维变量合成为线性无关的低维变量，成为`主成分`\n",
    "\n",
    "\n",
    "3. 新的低维数据集会尽可能地保留原始数据的变量。\n",
    "\n",
    "\n",
    "4. 可以在将高位数据集映射到低维空间时，尽可能地保留更多变量。\n",
    "\n",
    "\n",
    "5. 通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量，转换后的这组变量叫做主成分。\n",
    "\n",
    "<br>\n",
    "\n",
    "        我们如何得到这些包含最大差异性的主成分方向呢？事实上，通过计算数据矩阵的协方差矩阵，然后得到协方差矩阵的特征值特征向量，选择特征值最大（即方差最大）的 k个 特征所对应的特征向量组成的矩阵。\n",
    "        这样就可以将数据矩阵转换到新的空间当中，实现数据特征的降维。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "70fa0740",
   "metadata": {},
   "source": [
    "**选取的主特征是原来数据的哪些特征呢？**\n",
    "\n",
    "是原来数据的所有特征。\n",
    "\n",
    "结果的每一个变量都是原先所有变量的加权组合。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "abb7e23f",
   "metadata": {},
   "source": [
    "### PCA 主成分分析实战案例"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "8a580f28",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 葡萄酒数据集 + PCA\n",
    "import matplotlib.pyplot as plt\n",
    "from mpl_toolkits.mplot3d import Axes3D\n",
    "from sklearn import datasets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "02e6c77e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "红酒数据集的数据结构：\n",
      "(178, 13)\n",
      "红酒数据集的特征：\n",
      "['alcohol', 'malic_acid', 'ash', 'alcalinity_of_ash', 'magnesium', 'total_phenols', 'flavanoids', 'nonflavanoid_phenols', 'proanthocyanins', 'color_intensity', 'hue', 'od280/od315_of_diluted_wines', 'proline']\n",
      "红酒数据集的标签：\n",
      "['class_0' 'class_1' 'class_2']\n"
     ]
    }
   ],
   "source": [
    "data = datasets.load_wine()\n",
    "X = data['data']\n",
    "y = data['target']\n",
    "print('红酒数据集的数据结构：')\n",
    "print(X.data.shape)\n",
    "\n",
    "# 解释一下：这里是将红酒属性数据集和标签列进行了横向链接（也叫合并，学过数据库的都知道）\n",
    "print('红酒数据集的特征：')\n",
    "print(data.feature_names)\n",
    "\n",
    "# 解释一下：这是说这个数据集中的标签有三种，0，1和2，也就是这些红酒被分成了三类。\n",
    "print('红酒数据集的标签：')\n",
    "print(data.target_names)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "id": "5642eef9",
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 选取三个特征查看 wine 数据分布\n",
    "ax = Axes3D(plt.figure())\n",
    "for c,i,target_name in zip('>o*',[0,1,2],data.target_names):\n",
    "#     print(i,X[y==i ,0])\n",
    "    # X[y==i ,0]：当y=0，X中所有编号为0 的第一列作为 x轴\n",
    "    ax.scatter(X[y==i ,0], X[y==i, 1], X[y==i,2], marker=c, label=target_name)\n",
    "\n",
    "ax.set_xlabel(data.feature_names[0])\n",
    "ax.set_ylabel(data.feature_names[1])\n",
    "ax.set_zlabel(data.feature_names[2])\n",
    "ax.set_title(\"wine\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "id": "e74e2e6f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYMAAAEWCAYAAACEz/viAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAwEUlEQVR4nO2de3Qc9Xn3v49kKbZsx4SVU0iMdqHcXCzbYBPCS+I0URMSv0BTyJuGbghg3uqUQDEnbyBttsU2iSiEpNiUXI5IcMDaklubgFMuyREtKWkpMcG2bAN1ApIt0iSyDMaOwBbS8/4xu/Jqd2Z37pfd7+ecOZJmZ+b3zE/S75l5rqKqIIQQ0tg0RS0AIYSQ6KEyIIQQQmVACCGEyoAQQgioDAghhIDKgBBCCKgMCLFERA6JyElRy0FIGAjzDAghhPDNgBBCCJUBaTxE5EoR2Vzy8y9E5DslP+8VkaUioiJycmHfN0XkyyLyLyJyUET+S0R+v+Sc00XkxyKyX0SeF5GPhntXhHiDyoA0Io8DeLeINInI8QBaAJwHAAUfwRwA203OuxTAOgBvAfALAD2Fc2YD+DGAfwTw1sJxXxGRMwK+D0J8g8qANByq+gKAgwCWAngPgEcBvCQipxd+/ndVnTQ59Z9V9SlVfQNAvnA+AFwAYFBVN6rqG6r6cwD/BOAjwd4JIf4xI2oBCImIxwH8IYCTC9+/AkMRnFv42Yxfl3w/BuMNAgDSAM4RkVdKPp8BYJNv0hISMFQGpFF5HMCFAE4EcAsMZZCFoQzucnitvQAeV9X3+ykgIWFCMxFpVB4H8F4As1R1GMC/A/gggBSAZxxe64cAThWRy0SkpbCdLSIL/RWZkOCgMiANiar+N4BDMJQAVPVVAC8A+KmqTji81kEAHwDwMQC/gmFOug3Am/yUmZAgYdIZIYQQvhkQQgihMiCEEAIqA0IIIQhBGYjIMSLyPRF5TkSeFZFzgx6TEEKIM8LIM9gA4BFV/YiItAJoszqwvb1dM5lMCCIRQkj98PTTT+9T1flerhGoMhCRNwNYAeAKAFDVIwCOWB2fyWSwZcuWIEUihJC6Q0SGvF4jaDPRSQBGAGwUkWdE5OuFol5TiEi3iGwRkS0jIyMBi0MIIcSMoJXBDABnAfiqqp4J4HcA/qr0AFXtVdXlqrp8/nxPbzmEEEJcErQyGAYwrKr/Vfj5ezCUAyGEkBgRqM9AVX9daBRymqo+D6ALwK4gxySEJJvx8XEMDw/j9ddfj1qU2DFz5kwsWLAALS0tvl87jGiivwSQL0QSvQDgyhDGJIQklOHhYcydOxeZTAYiErU4sUFVMTo6iuHhYZx44om+Xz/wPANV3VrwCSxW1Q+r6stBj0lI2OQH8sisz6BpXRMy6zPID+SjFimxvP7660ilUlQEZYgIUqlUYG9M7GdAiEfyA3l0b+7G2PgYAGDowBC6N3cDALKd2ShFSyxUBOYEOS8sR0GIR3L9uSlFUGRsfAy5/lxEEhHiHCoDQjyy58AeR/sJiSNUBoR4pGNeh6P9JHmsXbsWX/ziFwMd45FHHsFpp52Gk08+GbfeemugY5lBZUCIR3q6etDWMr3kVltLG3q6eiKSqMHI54FMBmhqMr7mk+e8n5iYwDXXXIOHH34Yu3btwv33349du8KNwqcyIMQj2c4sei/sRXpeGgJBel4avRf2Jt55nIg1Np8HuruBoSFA1fja3e1Z2Pvuuw+LFy/GkiVLcNlll0377O6778bZZ5+NJUuW4JJLLsHYmOEv+u53v4tFixZhyZIlWLFiBQBg586deMc73oGlS5di8eLF2L17t+l4Tz31FE4++WScdNJJaG1txcc+9jE88MADnu7BMaoam23ZsmVKCImevj7VtjZVY4U1trY2Y3/Q7Nq1y/7B6fR0IYtbOu16/B07duipp56qIyMjqqo6Ojqqa9as0dtvv11VVfft2zd1bC6X0zvvvFNVVRctWqTDw8Oqqvryyy+rquq1116rfYVJO3z4sI6NjZmO+d3vflevuuqqqZ/vu+8+veaaa0yPNZsfAFvU4/rLNwNCSAW5HDA2PUAKY2PG/lixx8JJb7XfBo899hg+8pGPoL29HQBw7LHHTvt8x44dePe7343Ozk7k83ns3LkTAHDeeefhiiuuwN13342JiQkAwLnnnotbbrkFt912G4aGhjBr1izTMdWkF33Y4bVUBoSQCgJYY4Ohw8JJb7XfBqpadSG+4oorcNddd2FgYABr1qyZSgL72te+hs9//vPYu3cvli5ditHRUfzZn/0ZHnzwQcyaNQvnn38+HnvsMdNrLliwAHv37p36eXh4GG9729tc34MbqAwIIRUEsMYGQ08P0FbWL6utzdjvkq6uLnznO9/B6OgoAGD//v3TPj948CCOP/54jI+PI1/im/jlL3+Jc845BzfffDPa29uxd+9evPDCCzjppJNw3XXX4aKLLsL27dtNxzz77LOxe/duvPjiizhy5Ai+9a1v4aKLLnJ9D25gBjIhpIKeHsMPW2oq8rjGBkO24KTP5YzXlo4OQ8ise+f9GWecgVwuh/e85z1obm7GmWeeidIOjJ/73OdwzjnnIJ1Oo7OzEwcPHgQA3HDDDdi9ezdUFV1dXViyZAluvfVW9PX1oaWlBccddxxuuukm0zFnzJiBu+66C+effz4mJiawatUqnHHGGa7vwQ1iZquKiuXLlys7nZFy8nlf/9eJTaKa92effRYLFy4MfqCEYjY/IvK0qi73cl2+GZBYU4wcLD6hFiMHASqEoMlmOceNBJUBiTXVolq4UJGkMTo6iq6uror9/f39SKVSEUh0FCoDEmsSE9VCiA1SqRS2bt0atRimMJqIxJrERLUQknCoDEisCSBykBBiApUBiTXZLNDbC6TTgIjxtbeX/gJC/IY+AxJ7GNVCSPDwzYAQQmoQRj+DVatW4a1vfSsWLVoU6DhWUBkQQhJNfiCPzPoMmtY1IbM+g/xAHGtt1+aKK67AI488Etn4VAaEkMSSH8ije3M3hg4MQaEYOjCE7s3dnhVC2P0MAGDFihUVFVLDhMqAEJJYcv05jI1Pz0ocGx9Drt99re2dO3eip6cHjz32GLZt24YNGzZM+/ziiy/Gz372M2zbtg0LFy7EN77xDQDAzTffjEcffRTbtm3Dgw8+CMCoZLp69Wps3boVW7ZswYIFC1zLFTRUBoSESCK6hyWIPQfMsw+t9tshin4GcYDKgJCQCKhDY0PTMc88+9Bqvx2i6GcQB6gMCAmJxHQPSxA9XT1oa5meldjW0oaermT1M4gDVAaEhATrLPlPtjOL3gt7kZ6XhkCQnpdG74W9yHb6089gyZIl+NSnPjXt82I/g/e///04/fTTp/bfcMMN6OzsxKJFi7BixQosWbIE3/72t7Fo0SIsXboUzz33HD7xiU9YjnvppZfi3HPPxfPPP48FCxZM+SLCgv0MCAmJTMYwDZWTTgODg2FLE1/Yz6A6QfUz4JsBISHBOkskzlAZEBISjVJniRFT1oyOjmLp0qUVW9E/ESWB1yYSkUEABwFMAHjD66sMIUmm3usssTNdddjPAHivqi6lIiCkvmHEVHKhmYiQBsZvkw4jppJLGMpAAfxIRJ4Wke7yD0WkW0S2iMiWkZGREMQhhADBJMGxM11yCUMZnKeqZwH4EIBrRGRF6Yeq2quqy1V1+fz580MQhxACBGPSYcRUcglcGajqrwpffwvg+wDeEfSYhJDaBGHSqdeIqaD7Gezduxfvfe97sXDhQpxxxhkVxfHCIFBlICKzRWRu8XsAHwCwI8gxCSH2CMqkk80aSXSTk8bXoBVBPYSyzpgxA1/60pfw7LPP4sknn8SXv/xl7Nq1K1QZgn4z+D0AT4jINgBPAfgXVY2uewMhZIp6MOkEVfwv7H4Gxx9/PM466ywAwNy5c7Fw4UK89NJL3m7CKaoam23ZsmVKCAmPvj7VdFpVxPja1xe1RKq7du2yfWw6rWqogelbOu1+/B07duipp56qIyMjqqo6Ojqqa9as0dtvv11VVfft2zd1bC6X0zvvvFNVVRctWqTDw8Oqqvryyy+rquq1116rfYVJPXz4sI6NjdUc/8UXX9QTTjhBDxw4YPq52fwA2KIe19/Ak84IIfEl6UlwQfg97PQz+Ju/+Ru88sorOHToEM4//3wAR/sZfPSjH8XFF18MwOhn0NPTg+HhYVx88cU45ZRTqo596NAhXHLJJVi/fj3e/OY3u78JFzDPgBCSWILwe2hE/QzGx8dxySWXIJvNTimTMKEyIL5QD048kjyC8HtE0c9AVXHVVVdh4cKFFSWzw4JmIuIZ1qMhUVH8+8rlDNNQR4ehCLz83ZX2M2hubsaZZ56JTCYz9Xmxn0E6nUZnZycOHjwIwOhnsHv3bqgqurq6sGTJEtx6663o6+tDS0sLjjvuONx0002mY/70pz/Fpk2b0NnZiaVLlwIAbrnlFqxcudL9jTiE/QyIZ1inn/gJ+xlUh/0MSGxhPRpCkg/NRMQzHR3mbwasR0PIdEZHR9HV1VWxv7+/H6lUKgKJjsI3A+KZekheKpIkR3iSZHVKnMzXflLsZ1C+2VUEQc4LlQHxTL3UowkqmzUIkiSrU2bOnInR0dG6VQhuUVWMjo5i5syZgVyfDmRCCiTJEZ4kWZ0yPj6O4eHhqfh9cpSZM2diwYIFaGlpmbbfDwcyfQaEFEiSIzxJsjqlpaUFJ554YtRiNBw0ExFSIEmNWZIkK0kGVAaEFEiSIzxJspJkQGVASIEkOcKTJCtJBnQgk0jJD+SR689hz4E96JjXgZ6uHmQ7uaIR4gQ6kEmiyQ/k0b25G2PjRlGjoQND6N5sFDWiQiAkXGgmIpGR689NKYIiY+NjyPV76MhOfKeek9vIUfhmQCJjzwHzOEir/SR8WJG2ceCbQZ2RH8gjsz6DpnVNyKzPID8Q38e4jnnmcZBW+0n45HJHFUGRsTFjP6kvqAzqiKINfujAEBQ6ZYO3oxCiUCI9XT1oa5keH9nW0oaeLsZHxoV6Tm4j06EyqCPc2uC9KBEvZDuz6L2wF+l5aQgE6Xlp9F7Y29DO47jZ55nc1jgwtLSOaFrXBEXl71MgmFwzaXleZn0GQwcqC92k56UxeP2gnyKSKpTb5wEjkSzK/IE4ykQqYXMbMg23Nng6cuNBHO3zTG5rHKgM6gi3Nng6cuNBXO3z2axRCXVy0vhKRVCfUBnUEW5t8HTkxgPa50mUMM+gzsh2Zh07YIvHsyxEtPT0mNvnWXyOhAHfDAgAQyEMXj+IyTWTGLx+kIogApJsn49bFBRxDpUBITEiifb5oFtwUtGEA5UBIcQTQUZB1XOv57hBZUAI8USQUVBVFQ1fGXwlFGUgIs0i8oyI/DCM8Qgh4RFkFJSlohlSvjL4TFhvBqsBPBvSWIQkjwQ/5QbZgtNS0TS/ZP7KsHq190EblMCVgYgsAPC/AXw96LEISSQJN4wHGQVlqWgmPmN+wuhoYuYtbgRem0hEvgfg7wDMBfBpVb3A6ljWJiINSSZjKIBy0mkjpKjByecNH8GePcabQk8PkM1lzOcMaMh5i31tIhG5AMBvVfXpKsd0i8gWEdkyMjISpDiEhIJji49LD2yCLUuOMA23rWaDirp+R0IJ2kx0HoCLRGQQwLcAvE9E+koPUNVeVV2uqsvnz58fsDgkKBplYaqFK4uPCw9swi1L3slmgVTK/DPW73CHqoayAfhDAD+sdsyyZcuUJI++PtW2NlVjWTK2tjZjf2Qybe/T9B1plbWi6TvS2rc9WGGK42Hei9Pmobil09VOdj6B6XTlGDXHqTfi+IcXEQC2qMc1mnkGxDN2k47CensIu1lP6Xg4YP5UWtVy4cIDG9cKp6GS5PodMYTNbYhnmpqMx7JyRAw7LxBukxTfm/WYejCPCj1tvDteBA5kKsf22aeZaT+EodE5leOkDmFwX+V+Ut+E4kAWkYMi8qrV5mVwUh/YMXmH2bjF12Y9Nozz067b9Vmg5XfTLhFE5dEefBZtKBsHv0MPPuvvQKRhqKkMVHWuqr4ZwHoAfwXg7QAWAPgMgM8HKh1JBHaSjsI0a/jarMeGFpt23cX3Axf+OTBvEMBkYJaL7P670Is/RxqDEEwijUH04s+R3X+XvwORhsGJz+B8Vf2Kqh5U1VdV9asALglKsCSSH8gjsz6DpnVNyKzPBN5QPi7YMd2G2bjF12Y9NrRYxXiL70fbjWegb/v9wVUe7ehAFvdjECdiEs0YxInI4n5G0hDXOFEGEyKSLdQZahKRLICJoARLGmE7LeNGrdLLQZYsqJDFZcc3U2xoMV/Hs4vJhOZbrkDm0I6GD+8lLrEbdgQgA+ABAPsAjAD4AYCM13Cm0i3JoaXpO9KKtajY0nekoxYtNvT1GaGPIsbXREQAxjl8sWRC+1J/qW2t47EUkwQPfAgtZTSRTzSta4Kici4Fgsk1kxFIRHyjRjRRHGBFi8bGj2iimj2QReRGVf2CiPwDULnaqep1XgSoFzrmdZiGM7pyWpJ4kc3GbvEvh3kHxCt2fAbF0tNbADxtshH47LQkxCFhOuhJfWIntHRz4eu9ZlvwIiaDSJyIJFEEmYFt5qAXMUxHdCaXwUJa5th1LgD4MYBjSn5+C4BHvTotSrckO5BJvIibszoMP3TxngHjvulMNiHOAQEeQJgOZBHZqqpLy/Y9o6pn+qWYkuxAJvEhzNIXdgnTwUtnchXqdHLC7mcwISJTFkgRScPEoUxI1IRZ+sIuYTp46UyuAifHEifKIAfgCRHZJCKbAPwEwF8HIxYh7onj/3uYDl46k6vAybHEtjJQ1UcAnAXg2wC+A2CZqj4alGCEuCWo/3cvfscwM7DDHCtxcHKsceJggOE0fgeAFcXNq9OidKMDOTzCbv4SJtV8hG7v2w+/Y5hO7bg50GNFHU4OQnYg/18Aq2FULN0K4J0A/lNV3+eXYqIDORyKdZTGxo8a1tta2uoqFNYsaRiL3d93nfodSZ3ghwPZiTIYAHA2gCdVdamInA5gnar+qRcBSqEyCAffm78kBNP73n4pmv/1C5h8ZUHVShN2GvgQEhVhRxO9rqqvFwZ+k6o+B+A0L4OTaPC1+UuCqLi/7ZcCm+/GxMsLoDWaytPvSOodJ8pgWESOgVGt9Mci8gCAXwUhFAkWX5u/JIiK++u/BRifPW2XVQgq/Y6k3nESTfQnqvqKqq4F8LcAvgHgw8XPReQtvktHAqFR6yhV3LeD5vVB9l5ndQQSB5y8GUyhqo+r6oOqeqRkd79PMpGAadQ6SuX33fwW8xfbpibzBblWAx832GixHAlUUA2I13Ck4gbgGa/XYGgpCROzcNGwy9UUawmVb+n0URnDjoKs0/I9dQ3i1NxGRH6uqmd5uQajiUjY5PPA5ZcDEyYNXMMIG60WpbRpUzQ1lhhGmzxCDS21IQyVAUkkUYaNVlt4gWgWZYbRJo+wQ0trIT5eiySc/EAemfUZNK1rQmZ9BvmB+BqdowwbrRal5EeNJTe2f4bRNia2lYGIvFNE5pb8PFdEzik5pMtXyUhiKWY4Dx0YgkIxdGAI3Zu7Y6sQogwbrRal5HVRduucZhhtY+IkA/kZAGcVnBUQkSYYTgtPpqFSaCaqD5KY4RzHnvde+zK0twOjo5X77ZiZ4jgfxJqwzUSiJZpDVScBzPAyOKlPkpjhHETYqFe85Dbk8+aKALAwM5XZk7LIx24+SLA4WcxfEJHrAHy18PMnAbzgv0gk6XTM6zB9M6j3DOcgyGbdLcTVGvlUmJnKX0GK9qSiAKQhcPJm8BcA/heAlwAMAzgHQHcQQpH4U80x6SbDmUlO/lLNyVxh+49jazgSPl4TFaptAGYCeArANgA7YVQ5ZdJZwrGTlOSkbwCTnPzHKpktlTI5WMT8YJGwxSYuQRhJZyJyo6p+QUT+ASY9j1X1uirnCoDZqnpIRFoAPAFgtao+aXY8HcjJwO+kpLglOdWD89SR8zluvwDimLAcyM8Wvm4B8LTJZklBaR0q/NhS2PzJciOR4XeP4Tj0LC6aqUSAyy6LX60gpzhyPjOWlMDHDGTLAUSaYSiNkwF8WVU/Y3Us3wySQb29GZg9RUclS2TUw+tQAxNKOQoR2YwqT/OqepGtgYxeCN8H8JequqNkfzcKjuiOjo5lQ2arAokVXuPfg76eU6yUUSksxUDijB/KwE5o6Re9DFBEVV8RkX8D8EEAO0r29wLoBYw3Az/GakTyA3nk+nPYc2APOuZ1oKerJ7CS1MUF2q8HSb+v5xQ75iiWYiD1TqBmIhGZD2C8oAhmAfgRgNtU9Ydmx9NM5I5GaHAfJLXeDMJ8SyHEDaFmIIvIKSLyPRHZJSIvFLcapx0P4F9FZDuAnwH4sZUiIO7J9eemKQIAGBsfQ64/ujjxJBWqM/OfSqHsop8dzQiJM06SzjbCyD5+A8B7AdwHYFO1E1R1u6qeqaqLVXWRqt7sXlRiRdzKPyStUJ1Z5M2mTUY0UdFpzIQ4Uu84UQazVLUfhmlpSI1eyO8LRizihLg1uI/jm0otrGoTxbUtJSF+40QZvF6oVLpbRK4VkT8B8NaA5CIOiFuD+7i9qXiBlRoqYemQ+sSJMrgeQBuA6wAsA/BxAJ8IQCbikLg1uI/bm4oX4pAQFyf4plS/OOlnsBxADkAaRiYxYCQZL/ZLGEYT1Qf1FN0UdUJc3OB8xJOw+xnkYTiRLwFwQWG70MvgxBlJidCJ25uKF1ipYTp8U6pfnPQzGFHVBwOThFSl/Gm7GKEDIJaLbLYzG0u5ititvhB1Qlzc6OgwfzNgUl7ycWIm6gJwKYB+AIeL+1X1n/0ShmYia5LYSjKuRF3+Islw7uJJ2GaiKwEshVFO4sLCdoGXwYl96ilCJ2oYIeQeL604SbxxogyWqOpyVb1cVa8sbKsCk4xMo54idKImSru3ZVhmiPGaXoeKY79o4h0nyuBJEfmDwCQhVYlbLoFfROEUt7JvB233tgzL/OQTtuI1/dAXDA0llthtiQajyc0RAM8D2A5gAMB2r63WSje2vayOk1aSSaBve5+29bQp1mJqa+tpC/y+omqzadWKMt281+KDtO8yW8qQrnUmiTMIo+1lERFJWygT3xoQ0IHcWETpFI+il0tTk7H0liOYxCSaTT442kTBr/h+SxkS0K+B/XesCaufAQB/F31CgGid4tls+AuJZVhm86+ACYsTCvjl50hqaGh5FFPRvAVQIfiFE58BIa4x8w14cYonsT6OZQJb92DNzDa//BxJTaJjBFjwUBmQwLEqab3ylJU1neJmSiSpTlDLsMyvvKtmvKZfi3hSQ0OZ+Rw8gXY6c0qSfQZhtp1MGtV8Az1dPZbzZlXjaNZdv8Ho/8ypvJ4N+3mS7c5Jlt0rrIlUHT98BlQGPlBPhdmCoGldExSVf2cCweQaa6+llRLB2gmYvdTWcoIyeza58HdXnbAzkIkFSWzmEiZufQOWjuR55vtr2c8jtzsn0dERE5Jq3koSVAY+wFIR1XGbMGelLFIX/L0r+3mkduekOjpiBDOfg4XKwAdYKqI6bktaWymRDZ85x9VTotWbg2oID+qRv5YQUh36DHyAPoPg8NMxb2Z3LiVQG3SSs71I7KEDOUYwmigZFCNyzCJTgACjUxgOQwKEyoAQl4T+oM5wGBIgjCYixCWhVy5lOAyJOVQGZBpJ6bPslUjKMjAcxhkMxQ0VKgMyhVXZiHpUCHxQjyGli397O7BqFUNxQ4Q+g4SSH8hj9cOrMfraKAAgNSuFDR/a4MlpzT7LJDJqhXoVocPdlFBLWJP4kB/IY9UDq3Bk4sjUvtHXRnHlD64EANcKgclzJDLM8jDMYGW6wKCZKCY4sdXn+nPTFEGR8clxTyUwrJLkjp11rOtrEmILu4t83BsvJBgqgxCxWvCd2uqrPal7eYrv6epBa3Nrxf5XD79al34DX6Gz0xt2FvkkNF5IMFQGIVFtwXda6K5amQsvJTCynVnMbZ1bsd/rG0fdw7pD3jEL72pqMjYAaG4GLr+cHv4ACVQZiMgJIvKvIvKsiOwUkdVBjhdnrBb81Q+vNi/TDOunfKsn+JamlprF32qx/7X9jmQhYN0hPygP70qlgBkzjmYATkwA995LBRsgQb8ZvAHg/6nqQgDvBHCNiPxBwGPGEqvFtBgNZIbVU362M4t7/vgepGalpvalZqWw8cMbPZfAYNE9FwRRDrURzU6leRhz5gBHyvxiVLCBEqgyUNX/UdWfF74/COBZAG8Pcsy44nQxrVXiOduZxb4b90HXKHSNYt+N+3ypheS23HRD43c6M81OwdUbb0Qla5PQfAYikgFwJoD/KtvfLSJbRGTLyMhIWOKEjtkiW42oKp66LTfd0Pidzkyzkz8Ktnzh/+QnqWSroaqBbwDmAHgawMXVjlu2bJnWM33b+zR9R1plrWj6jrSmbksp1sJ0S9+R1r7tfVGLTOzS16eaTquKGF/7+sx22UNE1Viupm8igYlvm1o31denmkodlTmVcnDjZddpa5t+/21t9q9ldr7VvKbTzuWLGQC2qNd12usFag4AtAB4FMCnah1b78qgnL7tfdrW02apENp62qgQEoqntSydjseiVb7wX3119Zvq61NtaamUu7XVvUJwpU3Veg6tNjfyxQg/lEGg5ShERADcC2C/ql5f6/hGLEdRDC21iiiKohQEezN4x1P7gqjLXefzwOrVwGhZcIOIed3v4k1Z3XTpMWFhVaPcipYWYOPGxIauJqGE9XkALgPwPhHZWthWBjxmosh2ZjF4/SAEYvp52CGd9VasLqoqrJ78n16r6BVt5SJGeKZIdWepWYG4ckUAWC+uxZuqdnNhl5Fw6rwfH28sn4wJQUcTPaGqoqqLVXVpYXsoyDGTSlxCOp0mwMWZKBWbLf9ntcgWt+WuSyORACM+HzB+vvLKSoVQHrk0OloZ0lmL4k1VW4DDLiNh5dSvRoPXPWIGckyIS0hnPRWrC1WxlS3sPSufqB5g5DV81EqRVCv4Nj5umH9KsVsgroiUvcG2tgKHDhlyFL+W09oaTBmJWsrU7O0qnba+XqPXPfLqdPBzazQHcjnl0UZROI/Td6Qto5uqEYTsXq9p5ZjHWniWbbqgJo7Tlhbtu/rfrf2fXpzE1bzTVhEz5VE1RYHsHF/qCJ49++jPc+ZU3nf5McVoIi/OYKdzUOu81tbKe2tpCd6J7PcclIAkRBM52RpdGbjB70XYLMKpVlSTm3OCkKOc5nXNpoqgeV2za7lMKQ2lLN1SKetz7ISPWi0e1RSJkyia1lZr2cu32bMrF367oZpew0TNsLpPEXsKwY/wVycEMQcl+KEMaCZKMEHYxN0knQVhjvHjmhM64Wi/a8ycrdX2A7WdCtXMSNW802a2ciuOHAEOH648vqXFqA1UNK/09RmO5fHx6cdpDYdy0Yzz8Y9bJ9G5zQi2mgNVU9/ItGFyWeQ37Du6LO/bF3wUUQISCakMYoKbqJegbOLFCKfJNZMYvH6wZlhpEH4GP66ZnmduH7ba74Rpv6/rgXynwwvUylqutnhUUyTZLPKXP4r21iEIJiDzXkT7By+1lu/QIaMaaKltfeNGY4EsdV5bhYyaceyxlY5sM4oKzo3fpJp9vywyKBbVPYIqr+EjVAYxwO0TflycvU4ioewqPT+iq4Jyylf8vo4Bui80UQhz5lhfpFr4aD5vvYhaPf0XFEk+D6za+E6MHukA0AQcyGC0/25ceWIVhXDvvcY1rSKX8vlKx3E1Xn3VcFTXckw3N5srvI9/vPZbQi2HdMkiG4uH8moKPCb1kqgMYoDbJ/yww1GtFnKzRbe1uRWHjhyadqyZ0lv1wCq0f6Hd1jWdLuSOTF4O/iFNf1+tQK6r7MA3vamGgCbho8XHWCsKT/9WiiSXA468XtbNdnw2xh+/pVK+KeFrrIy5nLlJSASYPbty//h4dRMZYCiviSrmulqP79msYcqyomTxjcVDuZUCX7kyBq8tBoFmIDulETOQAaBpXRMUlb8HgWByzaTlecXFtXRhamtpC6SwXK2xSrOWj511LF49/CrGJ8enHTtrxqyqJburXTPQTGiHGb+Wvy8FJteV7pCj9fjtUi2L10YWsnXi7SRkTfN0+UqpJmu1bF6rrORqpNPG4pjL1TY/WWUuW2VJAxXZxJ6ywf0knzfuec8eQ1lVmwOHwvmRgUxlEAMy6zOm5SjslKIIa8F0IqPVsXYJvQSHw9XCci5eAQbX1z6/KtUW3r6+mo5OS10ybxDpG5ZjcM0r5k/k1WStNj+HDpkvyHPmGMqlmoI1U8LlmCmpauelUsCGDdPmKerqHlWx+n07fJBIQjkKYgMvJhGnzl63OPFPePVZDB0Y8lw+wpFD3qEdwfT3NQ709JfucFnC2sq2nE7bWrl6eoDWmW9M39nyO7R8YB16Ltpg+Aeclts2M3GIGCYOK970ptolNUrNXVaYzYdVolw6bRoZ5LW6R6D43QvDA3WhDKKqP+MXUfQQcDpnTvwTVsemZqVs93TwEirr2CHv8B/S9Pf19quRfbWwqBUdo8XQSSd47I2QzQL3fH0GUscfAjAJzBtE6qN/jY1/+0fG35PblbHcgaxqKJaSt4J8J5C5HmhaA2QuG0V+MWqX1Cj6Tfr67N+3CyeA2+oegeN3LwwPJN5MFKbdPI64MRO5mTMn51Q7FsA030ItHwLg3Gzk2Ozmlx3Bz+uU25ajWr1qmXKam4GJCeQ7jYiqsZLW3I7/D83uGwjMzh4bfPh902cAb/b2pONWEbqds/xAHqsfXj21gKdmpbDhQxtMx7KrpGRd7ZDFWo70clw55P1YgGPjqfSRag7tIm1tyHSPYeiYyo88/R9aKdfLLzfeSmLpBIgG+gwQn1j7KHAbkuplzl5747Wp70dfG7U0v9j1ZdhJAHMaKusq5NYPO0IsYhh9xk60T28v9swz/9jT/6FVgsBDD8XYCZBcEq8M4lL6OQrcLupu58yJ8rHrk6jVG9pNklhkFWBj5Az0hVrJZkXbdjaLjmPMlbqn/8NqyjW2ToDkknhlEJfSz1HgdlGvNWdWC7ld5ePEgVvujE3NSiE1K+XJkR6FQx5ArJyBvmCVbAYYIZwlT+OB/B/Wm3KNO14r3fm5ua1aGofSz27wKreXyp5WY1e7pt3y1m7LYDu991L5r/7h1Z7/BnypMBxgmeLQqVbe2oS+r1yt6U83q6yBpj/drH1fudrb+AFX+qwnEPceyE5ppKQzv6Kg/E46q+Zc7unqsSWz24xqu5jNXTlO5zLWiUlR4cQhHtQEximyKsYwmijBxDUKqlp0j67RCuWz8pSVeGj3Q9OUUa4/F+i9tX/8Ooz+8FPAgQ5g3h6g67PA4vs9jVePgUCecbLAcwIjhdFECSauUVDN0lx1f2mUUE9XD+7ddm+Fb2DlKSsD8+Pk88Dod/4OOJBBsSonNt8NbL+04lgnc1mPgUCecZKgxglMPFQGERHXKCgnDWGsoose2v2QLw5cs0KiuRyA8bJKmeOzgf5bKs53Mpf0VRpUBA/YySIGOIF1AJVBRMQ1CspJQ5hqbzdeayZZNSSxDHs/MH3RcTqX9RYI5AZPnfM4gYmHyiAiIgt/rIETJXXsrGNNr1Htidxu/oFVvlGzuRULc+a/7GkuY13MLCQ8dc7jBCYeOpBJBXYilPIDeVz5gyun9SwAjKY29/zxPZYlKsrPaWlqwcYPb6w4vlol57Y2Rv0EQdBRYCQ4GE1EIsMqGio1K4V9N+4zPaf9C+2mhenMzqkWnFKsVcZoQ3+Ja4QbqQ2jiUgg2DHlWPkL9r+23/K6VhVKzfZXM0GzEkEwxNWPRcKByqCBsLPI23UiOomGKo7rBJqgwyeufiwSDjQTNQh2M57tmgrsXs9OtnCTNGHipirN0QkhVaGZiNjGbqSI3WQ4u0+RZuOWM6l0ThISNTOiFoCEg91FvmNeh+mbgZn5J9uZrWlCsJMFbJX1nHT8rhtFSJAE+mYgIveIyG9FZEeQ45Da2LXx++1EtJMFbJX1nGQ8JXAREgFBm4m+CeCDAY9BbGB3kffbibjylJU1j7HT7cwudpPagsZTAhchERComUhVfyIimSDHIPYoLuZ2zBZ2zD92eWj3Q1U/b21u9S10sdxZXXwaBxC6ecbvQoQ0OZGgidyBLCLdIrJFRLaMjIxELU5dU15xNNefC/wJutbi52c0W5yexv0sREiTEwmDyJWBqvaq6nJVXT5//vyoxUksTswjYS4utRa/8clx3xbrqMqCm829n76XOCk5Ur9ErgyId5wu7mEuLrUa3gP+LdZRlAW3mnsAvvle4tr7gtQXVAZ1gNPFPczFpdQhbYVfi3UU5RSqzb3XMt5F4tr7gtQXQYeW3g/gPwGcJiLDInJVkOM1Kk4X97AXl+Ki2HdxX6CLdRTlFMJQrKwZRMIg6Giiyl6ExHecJIoBsGxsH/Ti4iSiycsYYUbZOJ17N4Qxb4SwNlEdYLdOUPk5XFy842buCfEb9jOImDgtqHGSpdHg3JOooTKIED4REkLiAquWRghjvwkh9QSVgUsY+00IqSeoDFzC2G9CSD1BZeASxn4TQuoJKgOXsF8sIaSeYDQRIYQkHEYTEUII8QUqA0IIIVQGhBBCqAwIIYSAyoAQQghiFk0kIiMAKusBV6cdwL4AxPELyucNyueduMtI+bzRDmC2qnrqGxwrZeAGEdniNaQqSCifNyifd+IuI+Xzhl/y0UxECCGEyoAQQkh9KIPeqAWoAeXzBuXzTtxlpHze8EW+xPsMCCGEeKce3gwIIYR4hMqAEEJIfJWBiNwjIr8VkR0l+/6PiOwUkUkRsQylEpEPisjzIvILEfmrGMo3KCIDIrJVRAIp02oh3+0i8pyIbBeR74vIMRbnRjV/duWLav4+V5Btq4j8SETeZnFuVPNnV77A589KxpLPPi0iKiLtFudGMocO5Ivqb3CtiLxUGHeriKy0ONf5/KlqLDcAKwCcBWBHyb6FAE4D8G8Alluc1wzglwBOAtAKYBuAP4iLfIXjBgG0RzB/HwAwo/D9bQBui9n81ZQv4vl7c8n31wH4Wszmr6Z8Yc2flYyF/ScAeBRGgmmFHFHOoR35Iv4bXAvg0zXOczV/sX0zUNWfANhftu9ZVX2+xqnvAPALVX1BVY8A+BaAP46RfKFgId+PVPWNwo9PAlhgcmqU82dHvlCwkO/Vkh9nAzCLvohy/uzIFxpmMha4A8CNsJYvsjm0KV8oVJGvFq7mL7bKwANvB7C35Ofhwr44oQB+JCJPi0h3RDKsAvCwyf64zJ+VfECE8yciPSKyF0AWwE0mh0Q6fzbkA6Kdv4sAvKSq26ocFtkc2pQPiPZ/+NqCOfAeEXmLyeeu5q8elYGY7Itb/Ox5qnoWgA8BuEZEVoQ5uIjkALwBIG/2scm+UOevhnxAhPOnqjlVPaEg27Umh0Q6fzbkAyKaPxFpA5CDtZKaOtRkX+Bz6EA+ILq/wa8C+H0ASwH8D4AvmRzjav7qURkMw7D5FVkA4FcRyWKKqv6q8PW3AL4P47UuFETkcgAXAMhqwcBYRqTzZ0O+SOevhH8EcInJ/rj8/VnJF+X8/T6AEwFsE5FBGHPzcxE5ruy4qObQrnyRzaGq/kZVJ1R1EsDdFuO6mr96VAY/A3CKiJwoIq0APgbgwYhlmkJEZovI3OL3MJymFdEMAY39QQCfAXCRqo5ZHBbZ/NmRL+L5O6Xkx4sAPGdyWJTzV1O+KOdPVQdU9a2qmlHVDIxF6yxV/XXZoZHMoV35Iv4bPL7kxz+xGNfd/AXpDffoSb8fxmvQOIxfylWFmx8GcBjAbwA8Wjj2bQAeKjl3JYD/huFRz8VJPhge/m2FbWfI8v0Chi1xa2H7Wszmr6Z8Ec/fP8H459sOYDOAt8ds/mrKF9b8WclY9vkgChE5cZlDO/JF/De4CcBA4Xf8IIDj/Zo/lqMghBBSl2YiQgghDqEyIIQQQmVACCGEyoAQQgioDAghhIDKgDQ4heqTppUpa5z3TRH5iIPjM2bVMQmJC1QGhBBCqAxI4yAiPygUFttpVlxMRD5RKAC2TUQ2FfalRaS/sL9fRDpKTlkhIv8hIi8U3xLE4HYR2VGod/+nId0eIZ6YEbUAhITIKlXdLyKzAPxMRP6p+IGInAGjSNl5qrpPRI4tfHQXgPtU9V4RWQXgTgAfLnx2PIB3ATgdRjbo9wBcDKOI2BIA7YVxfhL4nRHiEb4ZkEbiOhHZBqNXwgkASmv5vA/A91R1HwCoarGO/Lkwir4BRimAd5Wc8wNVnVTVXQB+r7DvXQDuV6OY2G8APA7g7EDuhhAf4ZsBaQhE5A8B/BGAc1V1TET+DcDM0kNgr0xy6TGHy84v/UpIouCbAWkU5gF4uaAITgfwzrLP+wF8VERSAFBiJvoPGFUfAaNhzBM1xvkJgD8VkWYRmQ+jdeFTftwAIUHCNwPSKDwC4C9EZDuA52GYiqZQ1Z0i0gPgcRGZAPAMgCtg9BK+R0RuADAC4Moa43wfhmlpG4y3iBtV9dcikvHxXgjxHVYtJYQQQjMRIYQQKgNCCCGgMiCEEAIqA0IIIaAyIIQQAioDQgghoDIghBAC4P8Dzg8SIZ4sKFcAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 选取两个特征查看 IRIS 数据分布\n",
    "ax = plt.figure()\n",
    "for c,i,target_name in zip('rgb',[0,1,2],data.target_names):\n",
    "    plt.scatter(X[y==i,0],X[y==i,1],c=c,label=target_name)\n",
    "plt.xlabel(data.feature_names[0])\n",
    "plt.ylabel(data.feature_names[1])\n",
    "plt.title('wine')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "67695917",
   "metadata": {},
   "source": [
    "**PCA:**\n",
    "* 通过坐标轴转换，寻找数据分布的最优子空间。\n",
    "    * 用协方差矩阵前 N个 最大特征值对应的特征向量构成映射矩阵\n",
    "* 然后原始矩阵左乘映射矩阵实现降维。\n",
    "    * 特征向量可以理解为坐标转换中新坐标的方向\n",
    "    * 特征值表示对应特征向量上的方差\n",
    "    \n",
    "**LDA**\n",
    "* 将带标签的数据通过投影降低纬度，是投影不同类举例员，同类分散程度小"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "id": "b7cfd926",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAEWCAYAAABv+EDhAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAxQklEQVR4nO2de5QdVZXwfzvdHZOGAEMnDGDIbRDRkIQEE2AYBB9BQUAcQWfEJgZhVi9eHyAjjk7PZwBtB0TlMbxWFGbAbh/gwPAK7wzo8A1igLyDRiGdNKMSGgiBQEg6+/uj6obbN1X31r1Vdavq1v6tdVbn1q1z6txK1dnn7L3P3qKqGIZhGPljVNIdMAzDMJLBBIBhGEZOMQFgGIaRU0wAGIZh5BQTAIZhGDnFBIBhGEZOMQFgpAoReUNE9ku6H1EiIo+JyN9H2N4aETk6qvaM/GICwEgVqrqzqj7fyGs204AqIp0ioq4gfcP9bV8v+V5E5DwRWS4ib4rIoIjcLiLTytq52G3n0Mb/CqNRmAAwjJQiIq0hqu+mqjsDpwDfFJFj3eNXA+cD5wG7AwcA/wkcX3JdAeYArwBzQ/TBSDkmAIyGICJfFpF7Sj7/XkRuK/m8TkRmuLPO/d1j/y4i14nIfSKyUUR+LSLvK6nzQRF5WEReEZHfisjfVrj+eBG5V0Rec8//lYiMEpEfA5OAe9wZ89fc828XkT+JyAYR+aWITClpq1q/PiEiz7l1rwWk5Lv3ichCERkSkZdFpF9Ediv5fo2I/KOILAXeFJFWEZkjIgNunZ5a7ruq/g+wApgqIu8HzgFOUdWFqrpZVTepar+qXlZS7UhgbxxB8QURGV3LNY3sYALAaBSPA0e6g+5eQBtwBICr898ZWOpR7xTgEuAvgN8DvW6dnYCHgZ8Ae7jnXV86UJfxD8AgMAH4S+CfAFXVOcBa4NOu+um77vn3A+93234G6A/Yr/HAfwD/DIwH/lD8nS4C/AvOADsZ2Ae42KPt44HdcGboN+DMyPcGOoCJPr9xBK665whgCvAsMBsYVNWnqlSdC9wD/Nz9fEKQ6xnZwwSA0RBcvf5GYAbwEeBB4EUR+aD7+Vequs2j6h2q+pSqbsUZhGe4x08A1qjqv6nqVlV9Bmfg/ZxPF7YAewEFVd2iqr/SCoGwVPVmVd2oqptxBujpIrJrgH4dB6xU1V+o6hbgKuBPJe3+XlUfdmff64EfuL+/lGtUdZ2qvuX+nntV9ZduX/4v4HWfynkZR4XzI+DrqvoojvD4Y6VKItIOfB74idv/X2BqoKYljI7RMGrlceCjwP7uv1/DGfwOdz978aeSf2/CWSkAFIDDROS1ku9bgR+LyCRgZfGgqwu/Amcgf8hRcTO/TO2xHRFpwZnRfx5nxVAccMcDG6r0a29gXcm1VUS2fxaRPYBrcNQs43AmYa+WdWFdyb/L23tTRIZK2nuj5NwDS/493hVOpQzhCMFKfBbYCixwP/cDj4jIBFdgGU2ErQCMRlIUAEe6/34cRwB8BH8B4Mc64HFV3a2k7KyqZ6nqWvffO7uDP+5s/h9UdT/g08CFIjLbbat8JfBF4DPA0cCuQKd7XKjOH3HUOk4FR9rsU/L9v7jXO0hVdwFO9Wi3tD/l7bXjzORxf9fOJWVtlb49CkwUkVkVzpmLI8zWisifgNtx1HWnVGnbyCAmAIxG8jjwMWCsqg4CvwKOxRnQnq2xrXuBA1wDaZtbDhGRyV4ni8gJIrK/OyC/Dgy7BeDPQOneg3HAZpwZczvwnRr6dR8wRUROcr14zgP2LGv7DeA1EXkvcFGV9n4BnCAiH3aNsZdS53urqquB64GfishHRWS0iIwRkS+IyNfd/szGUa/NcMt04HJMDdSUmAAwGoaq/g5n8PuV+/l14HngCVUdrlTXo62NwCeBLwD/i6OSuRx4j0+V9wOPuNf/H+B6VX3M/e5fgH92PYS+CtwKDAAv4qiSnqyhXy/jqI4uwxEg7weeKDnlEuBDOKqk+4A7qrS3Asdz5yc4q4FXcYzZ9XIecC1wHY4K7g84ap97cAzNi1X1IVX9U7HgqKwOEpGpIa5rpBCxhDCGYRj5xFYAhmEYOcUEgGEYRk4xAWAYhpFTTAAYhmHklExtBBs/frx2dnYm3Q3DMIxM8fTTT7+sqhPKj2dKAHR2drJo0aKku2EYhpEpRGTA67ipgAzDMHKKCQDDMIyckrgAEJEWEXlWRO5Nui+GYRh5Ig02gPOBVcAuSXfEMIx0s2XLFgYHB3n77beT7koqGTNmDBMnTqStrS3Q+YkKABGZiJP4ohe4MMm+GIaRfgYHBxk3bhydnZ24Yb0NF1VlaGiIwcFB9t1330B1klYBXQV8jQoJLkSkW0QWicii9estHLnRfPQv66fzqk5GXTKKzqs66V9WnnzMKPL222/T0dFhg78HIkJHR0dNq6PEBICInAC8pKpPVzpPVeer6ixVnTVhwg5urIaRafqX9dN9TzcDGwZQlIENA3Tf021CoAI2+PtT671JcgVwBHCiiKwBfgZ8XET6EuyPYTScnkd72LRl04hjm7ZsoufRmnK/G0ZdJCYAVPUbqjpRVTtxYrovVNVTk+qPYSTB2g3eSbz8jhtGlCRtAzCMXDNp10k1HTfSycUXX8z3vve9WK/xwAMP8IEPfID999+fyy7zTGddM6kQAKr6mKqekHQ/DKPR9M7upb2tfcSx9rZ2emf3JtSjJqO/Hzo7YdQo529/Nm0rw8PDnHPOOdx///2sXLmSn/70p6xcuTJ0u6kQAIaRV7qmdTH/0/Mp7FpAEAq7Fpj/6fl0TetKumvZp78furthYABUnb/d3ZEIgVtvvZWDDjqI6dOnM2fOnBHf/fCHP+SQQw5h+vTpnHzyyWza5Nh4br/9dqZOncr06dM56qijAFixYgWHHnooM2bM4KCDDmL16tWe13vqqafYf//92W+//Rg9ejRf+MIXuOuuu0L/DlQ1M2XmzJlqGEZ+WblyZfCTCwVVZ+gfWQqFUH1Yvny5HnDAAbp+/XpVVR0aGtJ58+bpFVdcoaqqL7/88vZze3p69JprrlFV1alTp+rg4KCqqr766quqqnruuedqX1+fqqpu3rxZN23a5HnN22+/Xc8444ztn2+99VY955xzPM/1ukfAIvUYU20FYBhGc7LWx5DudzwgCxcu5HOf+xzjx48HYPfddx/x/fLlyznyyCOZNm0a/f39rFixAoAjjjiC0047jR/+8IcMDw8DcPjhh/Od73yHyy+/nIGBAcaOHet5TfXI3R6FO6wJAMMwmpNJPoZ0v+MBUdWKg+9pp53Gtddey7Jly5g3b972jVk33ngj3/72t1m3bh0zZsxgaGiIL37xi9x9992MHTuWY445hoULF3q2OXHiRNatW7f98+DgIHvvvXeo3wEmAAzDaFZ6e6F9pIGd9nbneAhmz57NbbfdxtDQEACvvPLKiO83btzIXnvtxZYtW+gvsTf84Q9/4LDDDuPSSy9l/PjxrFu3jueff5799tuP8847jxNPPJGlS5d6XvOQQw5h9erVvPDCC7zzzjv87Gc/48QTTwz1OyAdweAMwzCip8s1pPf0OGqfSZOcwb8rnIF9ypQp9PT08JGPfISWlhYOPvhgSjMVfutb3+Kwww6jUCgwbdo0Nm7cCMBFF13E6tWrUVVmz57N9OnTueyyy+jr66OtrY0999yTb37zm57XbG1t5dprr+WYY45heHiY008/nSlTpoT6HQDipVtKK7NmzVLLCGYY+WXVqlVMnjw56W6kGq97JCJPq+qs8nNNBWQYhpFTTAVkGBmhf1k/PY/2sHbDWibtOone2b22X6DJGBoaYvbs2Tscf/TRR+no6Ij8eiYADCMDFKOGFgPHFaOGAiYEmoiOjg4WL17csOuZCsgwMoBFDTXiwASAYWQAixpqxIEJAMPIABY11IgDEwCGkQEsaqgRByYADCMDWNTQdNOIfACnn346e+yxB1OnTo2sTRMAhpERuqZ1seaCNWybt401F6yxwT8A/cv66byqk1GXjKLzqs5M51o+7bTTeOCBByJt0wSAkVma6eU2oqfoOjuwYQBFt7vORvGcNDofAMBRRx21Q+TRsCQmAERkjIg8JSJLRGSFiFySVF+M7BHny200B3G5zq5YsYLe3l4WLlzIkiVLuPrqq0d8f9JJJ/Gb3/yGJUuWMHnyZG666SYALr30Uh588EGWLFnC3XffDTgRQs8//3wWL17MokWLmDhxYqi+1UqSK4DNwMdVdTowAzhWRP4qwf4YGcL84o1qxOU6m0Q+gLhITAC4iWrecD+2uSU7kemMRDG/eKMacbnOJpEPIC4StQGISIuILAZeAh5W1V8n2R8jO5hfvFGNuFxnk8gHEBeJCgBVHVbVGcBE4FAR2cG/SUS6RWSRiCxav359w/topBPzizeqEZfrbGk+gOnTp3PhhReO+L6YD+ATn/gEH/zgB7cfv+iii5g2bRpTp07lqKOOYvr06fz85z9n6tSpzJgxg+eee44vfelLvtc95ZRTOPzww/ntb3/LxIkTt9sWwpCafAAiMg94U1V9nWktH4BRStzRMS36ZvqwfADVqSUfQGLRQEVkArBFVV8TkbHA0cDlSfXHyB5d07piG5At+qaRB5IMB70XcIuItOCoom5T1XsT7I9hbKeSl5EJACMucpMPQFWXAgcndX3DqIR5GRlJYPkADCNC6t0tbF5GRh4wAWA0LV67hU+/63TGf3d8VYFgXkZGHjABYDQtXnr8d4bfYeitoarhIyz6ppEHTAAYTUsQfX2l8BFZjL5pAfKMWjABYDQtQfX1zWLYtQB5yRF3PoB169bxsY99jMmTJzNlypQdAtDViwkAo2nx0uN70SyGXQuQtyP9/dDZCaNGOX/7MyoLW1tb+f73v8+qVat48sknue6661i5cmXodk0AGJnHT+1RrsfvGNtB26i2EXWbybBrrqsj6e+H7m4YGABV5293dzRCoNH5APbaay8+9KEPATBu3DgmT57Miy++GP6HqGpmysyZM9UwSulb2qftve3KxWwv7b3t2re0z/f8wpUFlYtFC1cWfM+Lol+NuE4phSsLI+5DsRSuLMR+7UaxcuXKwOcWCqrO0D+yFArh+rB8+XI94IADdP369aqqOjQ0pPPmzdMrrrhCVVVffvnl7ef29PToNddco6qqU6dO1cHBQVVVffXVV1VV9dxzz9W+PufZ2Lx5s27atKnq9V944QXdZ599dMOGDZ7fe90jYJF6jKm2AjAyTb1qD0UZfH2QU+84NXJjaZy6+EpGXnNdHclan4WP3/GgJJkP4I033uDkk0/mqquuYpdddgn3QzAVkJFxalF7lA7MAMPqvIRRG0vj0sVXEyzmujqSST6mHb/jQdGE8gFs2bKFk08+ma6uLk466aRwP8LFBICRaWrZses1MBeJaoDuvKpzu4ApJ4wuvn9ZP3PvnFtVsGTRdTUuenuhvcwHoL3dOR6GJPIBqCpnnHEGkydP3iH8dBhMABiZpha1h9/AXPp9vauA8tWFF/V6GxXbLq5YysmrkbcaXV0wfz4UCiDi/J0/3zkehiTyATzxxBP8+Mc/ZuHChcyYMYMZM2awYMGCcD+EFOUDCILlAzC8KMbtH9gwQIu0MKzDFHYt7BC/v/XSVt9BtEh7W3tdapNKM/8w7QZpu/hb85C7wPIBVKeWfAC2AjAyT9e0ru0rgUp6/WqDP9SvCqo0Cw+ri6/UdntbO8e9/zjbAGbUhQkAoykIYnhtkZZAbQ1sGKjZM8hPvVPYtbCDLr7WcA1+bbdIC/M/PZ8FqxeENjpbCIl0MDQ0tF3FU1qK9oaoMQFgJEpUA08Qb6AgK4AifrNov/4GtUXU4yLq1/Ytn72FrmldoTeAZS2ERJbU1rVSzAdQXoImg6n13pgAMBIjyoEniDdQYddCTW2Wz6Ir9TeoC6bfSuX8+8/37Ue1tsPmLshSCIkxY8YwNDTU1EKgXlSVoaEhxowZE7iOGYGNxPAzbhbVJrVQnsMXdjS8ep0zumU040aPY+gt7yW2IGybty2y/o66ZBSK9zvXd1JfXXaCIL+9nj6V/va0sGXLFgYHB7f71hsjGTNmDBMnTqStbWTIkzQmhd8HuBXYE9gGzFfVaELcGZkgytg1xYGukidMpXP8BvfSWXQU/Z206yRfj54g+YaLHk9ev7FeLyC/PqUxSF5bWxv77rtv0t1oGhJbAYjIXsBeqvqMiIwDngb+RlV9Q9zZCqC5iHIFEJYgs+go+tu/rJ9T7zjV87tqM+6wM/1Gt2ukh9S5garqH1X1GfffG4FVwHuT6o/ReJKMXdO/rJ/x3x2PXCLIJcL595/P3OlzR0QOHds6ljl3zNlu7O2d3cvoltEj2hndMrqm/nZN66JjrLdBr9qMOy5dfZwhJMy7KN0kpgIqRUQ6gYOBX3t81w10A0wKG8TDSBVhVRe1UKo62X3s7rz29msjvIKG3hripmdv4ubP3AwwYkZcNPbOnT53B+NjPSvoqz91teeMu5ogiTPcc9e0rsjve/nKongfi9erpM4yGkPiRmAR2Rl4HOhV1TsqnWsqoOyRhpfcS8XhR9FTyEvVU9xl7FWnHqN1rfclTSqzIFTqb+/sXlM7NRA/FVCiAkBE2oB7gQdV9QfVzjcBkC3SoluuFkqhFMGJ8ujnqeNXpxHeMmm5n0Gp5F3kZ3hOqzDLOqmzAYgTT/UmYFWQwd/IHlHorKPQIdfqpVNp561fnUaQtXDPlfYnWPaydJDkRrAjgDnAx0VksVuOS7A/RsSkZYdq0AG6aND1M053z+xOPOFKlsI9VzLyh928ZkRDkl5A/62qoqoHqeoMt4SPb2o0HL9Zelp2qHoNRG2j2tipbaftnzvGdnDzZ27ebgz1mmlff/z1mZqBJ02lFYtlL0sHiRuBa8FsAOmjkl4aSM0O1TQYo42R2P9J40ilEbhWTACkj2qeKWFe8qx5vRhGWkldKAijOaim5w/jX+7nKmhqAsOIBosGagTGS9cfpzEva14vhpE1TAVkBMJP1z93+lxuWXJLZnzTDSOPpG4fgJEt/DxyFqxeYLP0BmPxdYyosBWAEYgsxYxvZiqtxBasXsDAhoHtISuKIRfCRgo1T53sYysAIxS2cSdZirP+U+841XMlduOiG7d7TBXjFdWycc5rVRFmI17QVYqtZpLFVgBGIMLEoSmPxAnwyluv2IwyILUEs/Oimtus3//t2NaxnpnS6m2v/FnJWmyjLGP7AIzQ1KIOKJ47sGEAQXyDq9kLX51agtl5UU1NV2v79bZXLjhsn0fjsH0ARmiC+vSXz+wqRdYshnYwAeBPtdhJlQQsVFfT1RqArby98omBnzApv44FhEseswHkhEbqWr08hiqR9Rf+7PvOpvXSVuQSofXSVs6+7+xI2680gBd2LXDmrDN3iKtTJMjGOb/2O8Z2VI3X42UnKIbUrnYdsysljwmAHBBVVM2ghJ1RZomz7zubGxbdsN3wOqzD3LDohkiFgF/gtL6T+lhzwZoRQerg3bDVQV1y/dq/+lNXV3Xx9RL2iu4gBLwEkQWESx6zAeSARutaa9EpZ90G0Hppq2eWsBZpYes3t0Z2nbjdMett3889GJznq1p75mbaGMwInGPi9OH3eoEBvvyfX2bLti07nL9T206MaR2TOS8gv4FKLvFWdwDovOy8W/VihtxsYEbgHONnmAurevFL+j3/0/PZ5T27eLoQjm8fn7mBoVJyc788wX7Zw5oNC9iXbcwGkAPi0rVWStjyyluveNZplME3SqN3pd/ZPbPbs47f8WbDAvZlm4orABFpAf4emAg8oKpPlHz3z6r67Zj7Z0RA8WWMWtdayY0vrlVHECrN2Ov5zZV+5/XHXw/A/KfnM6zDtEgL3TO7tx/3618z6b3DhPw2kqWiDUBEfgS0A0/h5O99XFUvdL97RlU/FOriIjcDJwAvqerUauebDSBdVNL/+qkGGjE7jFovHWV7tvvVSIJ6YwEdqqpfVNWrgMOAnUXkDhF5D/g4+9bGvwPHRtCOkQCVVEtJqgai3mAUpQotqjzHjcZi9jQn1YzAo4v/UNWtQLeIfBNYCOwc9uKq+ksR6QzbjpEM1VRLSakGolY/RalCy+Lu16hVakZ6qKYC6gP6VPWBsuN/D9ygqm2hO+AIgHv9VEAi0g10A0yaNGnmwED9MVGMxpOEvjvNapYsuk1msc/GSOpSAanqqeWDv3v8R1EM/kFQ1fmqOktVZ02YMKERlzQiotE7kIuk2TMli7tfs7hqMYIReB+AiPw10FlaR1VvjaFPRkaoNruvpO+OezBOq2dKXB5ZcZKkR5cRL4H2AYjIj4HvAR8GDnHLDssJIz8Emd3XMnPMk5Gxa1oXay5Yw7Z521hzwZrQGbtqvW9V6/T3Q2cnjBoFnZ30vue4zK1ajGAECgUhIquAAzXiuBEi8lPgo8B44M/APFW9ye98cwNND0H0wkF1x2nW2aeZeu5b1Tr9/dDdDZtKVm7t7fR/by49mxdkZtVijCRULCARuR04T1X/GEfngmICID0EiS8UdIAyI2N91HPfqtbp7AQvR4tCAdZ4t2mkn7A5gccDK0XkQRG5u1ii7aKRJYLEcg9qjPVTFQ1sGMiFSqhe6jHOVq2z1qeu33Ej0wQ1Al8cZyeM7BE0CFgQY2ylLFKl9oVie1GR9ZAM9Rhnq9aZNMl7BTDJDL7NSKAVgKo+DjwHjHPLKveYkVOidLX0co0sJ+rdskm5qEZJPS6lVev09kJ72f9Fe7tz3Gg6gtoA/ha4AngMJwTEkcBFqvqLWHtXhtkAmpfS2bhfgpEo8hcUaRa7Qz2rmKp1+vuhp8dR+0ya5Az+XdlZGRk7EtYIvAT4hKq+5H6eADyiqtMj72kFTADkg0YMznEmyWlKTChkmrBG4FHFwd9lqIa6hlETjdgtawnJa6DoGjowAKrO3+5u57iRaYIO4g+4HkCnichpwH3Agvi6ZcRF2R6fVL7DjQjlkMWQDInR0zNyXwA4n3vSHcHUqE7gnMAicjJwBI4N4JeqemecHfPCVEDh8Nnjw/z5+VzNZ90LqGGMGuXM/MsRgW2mLssClhTesD0+Ljbw14g9OJmnLhuAiPy3+3ejiLxeUjaKyOtxddaIB9vj0xzunw3HyzW0rQ3eeKN+XWIWdJE5oFo46A+7f8ep6i4lZZyq7tKYLhpR4beXJ097fLKakStRurocPWGh4Kh9Ojqcv0ND9RmFzaicGoJGA32fmwYSEfmoiJwnIrvF2rMmJ4kJkO3xsdj2ddPV5ah7tm2DnXeGd94Z+X0tRmEzKqeGoF5A/wEMi8j+wE3AvsBPYutVk5PUBKh8IlcoNJcBOEhoZHP/jICwukTTRaaGoAJgm5sT+LPAVar6FWCv+LrV3CQ5ASqdyK1Z01yDfxDdvrl/RkBYXaLpIlNDUAGwRUROAeYC97rHGpISshmxCVD0BNXtpzldZGYIq0s0XWRqCCoAvgwcDvSq6gsisi/QF1+3mhubAEVPLbr9KDNyZY4ojE9hdYn11DevoVgIGg10paqep6o/dT+/oKqXxdu15qURE6A8pVgE0+0HIkrjU626xPIBHILXN6+h2AjqBXSEiDwsIr8TkedF5AUReT7uzjUrcRtj8+jrbrr9ACRlfAo7gJvXUGwEjQb6HPAV4GlguHhcVYdCXVzkWOBqoAX4UbVVhe0EDkazhDquFdvhW4WkQjqE3UlsoShCEzYa6AZVvV9VX1LVoWIJ2aEW4DrgU8CBwCkicmCYNg2HvPq651q3H4R6jU9h9e9hvR7MaBYbQQXAf4nIFSJyuIh8qFhCXvtQ4Peq+ryqvgP8DPhMyDYNTB9u+FCP8SkK/XvYAdy8hmIjqAA4DJgFfAf4vlu+F/La7wXWlXwedI+NQES6RWSRiCxav359yEvmA9OHG9spnb339MDcubUZn6LQv4cdwJt9B2OSqGoiBfg8jt6/+HkO8K+V6sycOVMbQV+faqGgKuL87etryGUjpW9pnxauLKhcLFq4sqB9S9P7I5rhfsdC2BvT16fa3q7qzN2d0t5eWzsiI+sXi0jtfQnxW2J/npv8IQQWqdc47HVwh5PgL3FCQNzvfj4QOCNI3QptHg48WPL5G8A3KtVphACI4p0xgmP324cobkyh4D14FwrxtFHPIBqgTt/SPm3vbVcuZntp722PTgjk4CEMKwDuB/4WWOJ+bgWWBalboc1W4HmcuEKjgSXAlEp1GiEAonhnjODY/fYh7I3p6/OuX+vsPejgWM8gGrBO4crCiMG/WApXBrwX1cjBQ+gnAILaAMar6m3ANldttJUSd9B6cNs4F3gQWAXcpqorwrQZBWkL09DsGyDTdr9TQ5gbUzTc+uEaXwNtFgyqf6/HVhCwjp/3mperc13k+CEMKgDeFJEOQAFE5K+ADWEvrqoLVPUAVX2fqqbCQpkmjzM/B4yzz65fKKRNoKTpfqeKMDfGa2At4hpfa9osGGTXbz2DaMA6ft5rgkSzuTHHD2FQAXAhcDfwPhF5ArgV+D+x9SpBkvI46++H8eOdSZaI8+/zz/eeIN14Y31eeWncUZ97Dz8/iRzmxlQadN3Ze+SJceoZRAPW6Z3diyA7nKZoNIl88vwQeumFvAqOzn4KMBVoC1ovytKsXkB9faqjR/urbIOUIOrKjo7K9fv6knGGaHIHDH+q6cDrvTEBdNpysXjq1eXiGr17gv6WkHW8+hqqv159aeKHEB8bQNBQEC3A8UCnKwiKwuMHMcgkX5o1FITfTvla6evzd43u74dTT61cf/Ro5y3csuXdY+3t5nIdG3ElWy8u9UqXj2X/kbGEC+nvd9RPa9c6s/je3mBB4gLUyWt4k6jwCwURVAAsAN4GluEaggFU9ZIoO1mNZhUAfqFOvBDxP7fSYB1GyIQdjwwf4oxxU2VgLdoAStVA7W3tqc2NkLX+po2wAmCpqh4US89qoFkFQLXBuaUFhoedgfi44+CWW/xtfH6DdS1CphyLuRUTca0AApK14HlZ62+a8BMAQfX/lwOfDHJunKVRNoBGE8QGUK4artXF208tHJV9waiDHGxAMtIBIfcBPAncKSJvicjrIrJRRF6PTDzlnK4uuPlm6OjwP2fTJscrqLMT5sxxVgVejBrl7eLZ2+vM5CsxejS0lSX6zIszRCJYjBsjYYKqgJ4H/gZn92+dioTwNKsKqJww6ppSym0ClQRAofDuQF+rHc/IIfUYfI3ECJsPYDWwPMnBv17StvEpCLXsP2lpcQZ2rxVB+abKQsG7jaLKuaur9kx/RhNQ60uSxg0lpX3L2gufJF56ofIC/DvwS5yAbRcWS5C6UZZabQD1uiYn7Q7s1e9qOv8gQRtN5WzsQD0PhZ9BqaOj+rWKdVta3jUwRfUA2gPuCyGDwc3zKkHqRllqFQC1xnhK0/NTLoj8NnEVf0vQdzINAs5IEfUM5n6zDfB/oCrNaqJ6yXIQ1K1eQgmAtJRaBUCtocyTeH6CDshBNo22te3Y99GjbZA3KlDPYF7JpczvZanmhhbFS1bpt+ScugQAcJX79x6cWEAjSqW6cZS4VwBR5b4ISq0rjmrCotoqwTB2oJ7BvB4/5EqDc9CXzO8FKFUt+bXtFb46R0vhegXATPfvR7xKpbpxlLhtAI1eAUR9vUYLMKMJqDdvQK2zjbArAL+X+ayzghnMSttPk663QYRWAQETgAlBz4+j1LMRrBZBX8tz4dVurZOKqAdsU4Eadc1s61k61rN8DWMD8Hu4i8bkaqX0pcrhi1LvCkCAi4GXgSHgVWA98M1K9eIqjUoJWe398XqWR4/eUQdfrzNFvc9hDic2Rin1PgBh6tUibOr1Aqq0SglaSl+qHC6V6xUAXwEeBvYtObYfThavr1SqG0dJSyiIWsIqRDmJCkLOVJtGKWGMQGl9cKr5RAdZAZS/VLYCCCwAnsVJB1l+fALwbKW6Vdr9PLACJ7LorKD10iIAqtmzaplUpPW9MzJGVDmA00al2ZafDaCtzRGGfi9VDpfK9QqA5fV8V60Ak4EPAI9lUQBEtQIwjMiox5snCaIylEG4xDk5m3nVKwCeqee7oCWrAiAqG4BhREY9/vyNpK/PW0VV7SXxU2tV23VsjMBPAFSLBTTdjf5ZXjYC06rUbVq8gjjefDP8279ZYEcjIfwCSHV0JP8QFmMHDQ3t+F15wCqjoQSKBlpXwyKPAHt6fNWjqne55zwGfFVVfUN8ikg30A0wadKkmQNR5E40jGYjQBrIxKiW8ahSxqE4s6bVQsajn4aNBlozqnq0qk71KHfV2M58VZ2lqrMmTJgQV3dzSzF4ogi0tjp/LYhiBklzboG1ayt/77d66e93BEAtdYLQTNFPw+KlF2pUIaM2gGahEfG5DKNqmIazztqxTtCHs569CFFFP02Tcb0KpCkYHPBZYBDYDPwZeDBIPRMA0dKI+FxGjind+FXJSO01APs9nKVxfRo1mDfBxjE/ARCbCqjKquNOVZ2oqu9R1b9U1WOS6EdUxJmDIs62q63Mq31vGL6Uqk3AGTL9UtJ5GYL9Hj4tsQf09Iy0efi1FaTdSg+7n7opjBoqJSQiAJqJaurBMAN43KrHas9vEzzfRlJ4Dc6lg3c55QNwpYevOMA3ajDv7XUM6qWIwHHH+dfJCl7LgrSWNKqAKq0ow244jFv1aDYAIzZq2S7v9VCfdZb/uUXVSz0vSL0v5Vln7fibMvSSkCYbQL0ljQKgknow7ADeCNVj3Fn6jJxSKdNYkAE4yM7mRgWxq9SfjBjKTADERKXnIuwAnvFnzsgzlQbnIANw0J3N5TuMOzrCz168+pdxQ7AJgJio9JyHHcBzGLPKaCbCxNsJkqu43vAS1frs9dJlPN2eCYAYqZSpLuwAnrOYVYbhECQJdqUw0fUOzGFVVynFBEBChBnAszD4Z6GPRkap9HBV28RSr2qmkqonww+7nwCILRZQHMyaNUsXLfING9RU+IV2mTsXFixIR0iSNIefMZocvxhBRQoFWLOm9nb94hbV215KaHgsICMcfntcbrwxPSFJ6tmHY+SQOHYzVvLbb293Zkb14OXzX9penDszk8BrWZDWkkUVUL3U4kadlB0q444RRtScdda7vsQtLc7nIIawehO6eNkA4vIC8rtmRuwAmA0gW9SSdSypAdfcVI3t+G3c2mmnyg9JmEG10Tr5DD/wfgLAVEApxW/3uRdJhWyotlo2csT8+d7H33zT+3gxXEMYPWJXl6OX37bN+Vur4alWdU49oSdSjgmAlOIV3v3MM6sPuI1UUaY5BL3h0qgHYni4tvOLs5awg2q9v6+eQFvNGBTOa1mQ1pJGFVCjV6GVrpdhFaURB418IIq6//IyalTlPgRRq8Shk29kHKEUgNkAoidtz0OGVZRGHDTygfCzARQNwfXOWuLaal+vB0NG9wKYAIiBtA245pVjjKDRD4SXF1AlgkQijCvYVtpe3pjxEwBmAwhBo2xCQdWczaiiNELQ6Afi+uth61ZnKN261fnsR3nCmOHhdw1apUakSi9ZmN9nHgwOXlIhrSWPK4Ba1ExpU0kZCZPmByLoyxNnwo2MqnPqgTSpgIArgOeApcCdwG5B6qVNADTi/apVyOTomTaCkNYHIqj6JoiNII2/L2X4CYBEYgGJyCeBhaq6VUQud1ci/1itXhpjAfX3Oy7LccXm8Qt5IuK4PxtGJqkl5k7cL1kOSFUsIFV9SFW3uh+fBCYm0Y8oCLsXpRq7717bcQjnGt1MYU6MFFOLDj7ulyzHpMEIfDpwv9+XItItIotEZNH69esb2K1sUm8i+bgT0BvGCGwXYXDinJl56YWiKMAjwHKP8pmSc3pwbAASpM202QAaQaWgcF6qz3oN0znzijPyStZsBhEZGkmTDQBAROYCZwKzVXVTtfMhnTaAuPFTlYqMtA0U4/DPmVOfzcBsDUbTk8UEFhHlJ0iVDUBEjgX+ETgx6OCfVcKu3vyCwpUP1sX4WX4u0Kq2h8DIOVlMYBHzZqOkbADXAuOAh0VksYjcmFA/YiUKvbqXqtRv0bZ2rbfAKFLp+rYvxmh6shjNM+6ZmZdeKK0lazaAuPTq1dqtFCalfB9NKVlTjxpGTWTR0BWzDSDxQb2WkjUBEFcolqDPRLWsYmnZFGrkjKRmGmneGV2JCO6XCYAEiHPCEeSZCJpVzGb7RsNIehDO6TLXBEACpOFZ90qb2qjVQE7fNaMSWVTDNAF+AiANG8GalqT3upRevxpRO0PYxjLDkywaYpuYxPYB1EMe9wFEhZcLdDlR+vxH5L5sNBv2YCRCqvYBGI0nyGogSp9/m+gZnjSDv3ETBc0yAZAjijG1+vrifwdtY5nhSdJ60bA0mW7TVEA54uyznXdteNiZvIwd66iE4oiwm8Vd94ZRlYyqsEwFlHPOPhtuuMEZ/MHR9b/5Jpx5ZjwRdrM+0TMMT5pMt2krgJzQ2vru4F9KS4uTvtUwjADYCsDIIl6Df6XjhmF40AxG7BJMAOSElpbajhuG4UGT6TZNACRElJ5kQdrq7vau63fcMAwfqqWozJKbqNf24LSWrIWC8CPKEBG1tHXWWaotLc45LS3OZ8MwIiTp+C8+kLaMYPXQLEbgKO1IGbVJGUZzktIX0ozAKSJKT7Im80ozjGyTsRfSBEACRLlL1nbcGkaKyNgLaQIgAaL0JGsyrzTDyDYZeyGTSgr/LRFZ6uYDfkhE9k6iH0kRpSdZk3mlGUa2ydgLmYgRWER2UdXX3X+fBxyoqmdWq9csRmDDMIxGkiojcHHwd9kJyI4rkmEYRpPQmtSFRaQX+BKwAfhYhfO6gW6ASSk1pBiGYWSR2FRAIvIIsKfHVz2qelfJed8AxqjqvGptmgrIMAyjdvxUQLGtAFT16ICn/gS4D6gqAAzDMIzoSMoL6P0lH08EnkuiH4ZhGHkmKRvAZSLyAWAbMABU9QAyDMMwoiURAaCqJydxXcMwDONdbCewYRhGTjEBYBiGkVNMABiGYeQUEwCGYRg5xQSAYRhGTjEBYGSGLKVaNYwskFgsIMOohf5+J4H9pk3O54GBdxPapzTSrmGkHlsBGJmgp+fdwb/Ipk3OccMw6sMEgJEJMpZq1TAygQkAIxNkLNWqYWQCEwBGJshYqlXDyAQmAIxMkLFUq4aRCcwLyMgMXV024BtGlNgKwDAMI6eYADAMw8gpJgAMwzByigkAwzCMnGICwDAMI6eIqibdh8CIyHqcHMJxMh54OeZrZBW7N/7YvfHH7o03jbwvBVWdUH4wUwKgEYjIIlWdlXQ/0ojdG3/s3vhj98abNNwXUwEZhmHkFBMAhmEYOcUEwI7MT7oDKcbujT92b/yxe+NN4vfFbACGYRg5xVYAhmEYOcUEgGEYRk4xAVABEfmqiKiIjE+6L2lBRK4QkedEZKmI3CkiuyXdpyQRkWNF5Lci8nsR+XrS/UkLIrKPiPyXiKwSkRUicn7SfUobItIiIs+KyL1J9cEEgA8isg/wCcCSDo7kYWCqqh4E/A74RsL9SQwRaQGuAz4FHAicIiIHJtur1LAV+AdVnQz8FXCO3ZsdOB9YlWQHTAD4cyXwNcCs5CWo6kOqutX9+CQwMcn+JMyhwO9V9XlVfQf4GfCZhPuUClT1j6r6jPvvjTgD3XuT7VV6EJGJwPHAj5LshwkAD0TkROBFVV2SdF9SzunA/Ul3IkHeC6wr+TyIDXI7ICKdwMHArxPuSpq4CmeCuS3JTuQ2I5iIPALs6fFVD/BPwCcb26P0UOneqOpd7jk9OMv8/kb2LWWIxzFbMZYgIjsD/wFcoKqvJ92fNCAiJwAvqerTIvLRJPuSWwGgqkd7HReRacC+wBIRAUfF8YyIHKqqf2pgFxPD794UEZG5wAnAbM33RpJBYJ+SzxOB/02oL6lDRNpwBv9+Vb0j6f6kiCOAE0XkOGAMsIuI9KnqqY3uiG0Eq4KIrAFmqapFM8TxegF+AHxEVdcn3Z8kEZFWHEP4bOBF4DfAF1V1RaIdSwHizJ5uAV5R1QsS7k5qcVcAX1XVE5K4vtkAjFq5FhgHPCwii0XkxqQ7lBSuMfxc4EEcI+dtNvhv5whgDvBx9zlZ7M54jRRhKwDDMIycYisAwzCMnGICwDAMI6eYADAMw8gpJgAMwzByigkAwzCMnGICwGhKRGTYdT1cISJLRORCERnlfjdLRK5JqF//L0Tdc92ooxah1ogEcwM1mhIReUNVd3b/vQfwE+AJVZ2XbM/qR0QOBl4FHsM2JxoRYCsAo+lR1ZeAbuBccfhoMQa7iFwsIreIyEMiskZEThKR74rIMhF5wA1ngIjMFJHHReRpEXlQRPZyjz8mIpeLyFMi8jsROdI9PsU9ttjNnfB+9/gb7l9xcyssd6/1d+7xj7pt/sLNu9Dv7qpFVZ9V1TUNvn1GE2MCwMgFqvo8zvO+h8fX78MJzfsZoA/4L1WdBrwFHO8KgX8FPqeqM4Gbgd6S+q2qeihwAVBcYZwJXK2qM4BZOHGDSjkJmAFMB44GrigKFZzImRfg5BjYD2dXrWFETm6DwRm5xCt6J8D9qrpFRJYBLcAD7vFlQCfwAWAqTvgL3HP+WFK/GOjsafd8gP8Bety473eo6uqya34Y+KmqDgN/FpHHgUOA14GnVHUQQEQWu23+d42/1TCqYisAIxeIyH7AMPCSx9ebAVR1G7ClJMLpNpxJkgArVHWGW6ap6ifL67vtt7pt/QQ4EWcV8aCIfLy8SxW6u7nk39vbNIyoMQFgND0iMgG4Ebi2zvDVvwUmiMjhbnttIjKlyjX3A55X1WuAu4GDyk75JfB3bl7YCcBRwFN19M0w6sYEgNGsjC26gQKPAA8Bl9TTkJvu8XPA5SKyBFgM/HWVan8HLHdVOB8Ebi37/k5gKbAEWAh8rVq+CRE5T0QGcfIOLBWRRNMJGtnH3EANwzByiq0ADMMwcooJAMMwjJxiAsAwDCOnmAAwDMPIKSYADMMwcooJAMMwjJxiAsAwDCOn/H9+uJkTLd2lsAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 标准化后做 PCA\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "X = StandardScaler().fit(X).transform(X)\n",
    "\n",
    "from sklearn.decomposition import PCA\n",
    "# n_components= n: 主成分分析后剩下 n列\n",
    "pca = PCA(n_components=2)\n",
    "X_p = pca.fit(X).transform(X)\n",
    "# X_p.shape -->(178, 2)\n",
    "ax = plt.figure()\n",
    "for c,i,target_name in zip('rgb',[0,1,2],data.target_names):\n",
    "    plt.scatter(X_p[y == i,0],X_p[y == i,1],c=c,label=target_name)\n",
    "    \n",
    "plt.xlabel('Dimension1')\n",
    "plt.ylabel('Dimension2')\n",
    "plt.title(\"wine-standard-PCA\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "id": "fb96ddaf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#不需要标准化的LDA有监督降维\n",
    "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA\n",
    "lda = LDA(n_components=2)\n",
    "X_r = lda.fit(X,y).transform(X)\n",
    "ax = plt.figure()\n",
    "for c,i,target_name in zip('rgb',[0,1,2],data.target_names):\n",
    "    plt.scatter(X_r[y==i,0],X[y==i,1],c=c,label=target_name)\n",
    "    \n",
    "plt.xlabel('Dimension1')\n",
    "plt.ylabel('Dimension2')\n",
    "plt.title(\"LDA\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "id": "da3d7859",
   "metadata": {},
   "outputs": [],
   "source": [
    "# print(X_r[y==0,0])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "66477ee6",
   "metadata": {},
   "source": [
    "## PCA 演示\n",
    "还是以红酒数据集为例，演示 PCA主成分分析的使用"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "d1478d2c",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "from sklearn.datasets import load_wine\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "361397d0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "红酒数据集的数据结构：\n",
      "(178, 13)\n",
      "红酒数据集的特征：\n",
      "['alcohol', 'malic_acid', 'ash', 'alcalinity_of_ash', 'magnesium', 'total_phenols', 'flavanoids', 'nonflavanoid_phenols', 'proanthocyanins', 'color_intensity', 'hue', 'od280/od315_of_diluted_wines', 'proline']\n",
      "红酒数据集的标签\n",
      "['class_0' 'class_1' 'class_2']\n",
      "将样本数据和标签，水平方向连接起来，展示表格头5行数据\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "      <th>0</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14.23</td>\n",
       "      <td>1.71</td>\n",
       "      <td>2.43</td>\n",
       "      <td>15.6</td>\n",
       "      <td>127.0</td>\n",
       "      <td>2.80</td>\n",
       "      <td>3.06</td>\n",
       "      <td>0.28</td>\n",
       "      <td>2.29</td>\n",
       "      <td>5.64</td>\n",
       "      <td>1.04</td>\n",
       "      <td>3.92</td>\n",
       "      <td>1065.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>13.20</td>\n",
       "      <td>1.78</td>\n",
       "      <td>2.14</td>\n",
       "      <td>11.2</td>\n",
       "      <td>100.0</td>\n",
       "      <td>2.65</td>\n",
       "      <td>2.76</td>\n",
       "      <td>0.26</td>\n",
       "      <td>1.28</td>\n",
       "      <td>4.38</td>\n",
       "      <td>1.05</td>\n",
       "      <td>3.40</td>\n",
       "      <td>1050.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>13.16</td>\n",
       "      <td>2.36</td>\n",
       "      <td>2.67</td>\n",
       "      <td>18.6</td>\n",
       "      <td>101.0</td>\n",
       "      <td>2.80</td>\n",
       "      <td>3.24</td>\n",
       "      <td>0.30</td>\n",
       "      <td>2.81</td>\n",
       "      <td>5.68</td>\n",
       "      <td>1.03</td>\n",
       "      <td>3.17</td>\n",
       "      <td>1185.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14.37</td>\n",
       "      <td>1.95</td>\n",
       "      <td>2.50</td>\n",
       "      <td>16.8</td>\n",
       "      <td>113.0</td>\n",
       "      <td>3.85</td>\n",
       "      <td>3.49</td>\n",
       "      <td>0.24</td>\n",
       "      <td>2.18</td>\n",
       "      <td>7.80</td>\n",
       "      <td>0.86</td>\n",
       "      <td>3.45</td>\n",
       "      <td>1480.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>13.24</td>\n",
       "      <td>2.59</td>\n",
       "      <td>2.87</td>\n",
       "      <td>21.0</td>\n",
       "      <td>118.0</td>\n",
       "      <td>2.80</td>\n",
       "      <td>2.69</td>\n",
       "      <td>0.39</td>\n",
       "      <td>1.82</td>\n",
       "      <td>4.32</td>\n",
       "      <td>1.04</td>\n",
       "      <td>2.93</td>\n",
       "      <td>735.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      0     1     2     3      4     5     6     7     8     9     10    11  \\\n",
       "0  14.23  1.71  2.43  15.6  127.0  2.80  3.06  0.28  2.29  5.64  1.04  3.92   \n",
       "1  13.20  1.78  2.14  11.2  100.0  2.65  2.76  0.26  1.28  4.38  1.05  3.40   \n",
       "2  13.16  2.36  2.67  18.6  101.0  2.80  3.24  0.30  2.81  5.68  1.03  3.17   \n",
       "3  14.37  1.95  2.50  16.8  113.0  3.85  3.49  0.24  2.18  7.80  0.86  3.45   \n",
       "4  13.24  2.59  2.87  21.0  118.0  2.80  2.69  0.39  1.82  4.32  1.04  2.93   \n",
       "\n",
       "       12  0   \n",
       "0  1065.0   0  \n",
       "1  1050.0   0  \n",
       "2  1185.0   0  \n",
       "3  1480.0   0  \n",
       "4   735.0   0  "
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "wine = load_wine()\n",
    "x = wine.data\n",
    "y = wine.target\n",
    "print('红酒数据集的数据结构：')\n",
    "print(wine.data.shape)\n",
    "print('红酒数据集的特征：')\n",
    "print(wine.feature_names)\n",
    "print('红酒数据集的标签')\n",
    "print(wine.target_names)\n",
    "\n",
    "sample = pd.concat([pd.DataFrame(x),pd.DataFrame(y)],axis=1)\n",
    "print(\"将样本数据和标签，水平方向连接起来，展示表格头5行数据\")\n",
    "sample.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "b2fa6f35",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14.23</td>\n",
       "      <td>1.71</td>\n",
       "      <td>2.43</td>\n",
       "      <td>15.6</td>\n",
       "      <td>127.0</td>\n",
       "      <td>2.80</td>\n",
       "      <td>3.06</td>\n",
       "      <td>0.28</td>\n",
       "      <td>2.29</td>\n",
       "      <td>5.64</td>\n",
       "      <td>1.04</td>\n",
       "      <td>3.92</td>\n",
       "      <td>1065.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>13.20</td>\n",
       "      <td>1.78</td>\n",
       "      <td>2.14</td>\n",
       "      <td>11.2</td>\n",
       "      <td>100.0</td>\n",
       "      <td>2.65</td>\n",
       "      <td>2.76</td>\n",
       "      <td>0.26</td>\n",
       "      <td>1.28</td>\n",
       "      <td>4.38</td>\n",
       "      <td>1.05</td>\n",
       "      <td>3.40</td>\n",
       "      <td>1050.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>13.16</td>\n",
       "      <td>2.36</td>\n",
       "      <td>2.67</td>\n",
       "      <td>18.6</td>\n",
       "      <td>101.0</td>\n",
       "      <td>2.80</td>\n",
       "      <td>3.24</td>\n",
       "      <td>0.30</td>\n",
       "      <td>2.81</td>\n",
       "      <td>5.68</td>\n",
       "      <td>1.03</td>\n",
       "      <td>3.17</td>\n",
       "      <td>1185.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14.37</td>\n",
       "      <td>1.95</td>\n",
       "      <td>2.50</td>\n",
       "      <td>16.8</td>\n",
       "      <td>113.0</td>\n",
       "      <td>3.85</td>\n",
       "      <td>3.49</td>\n",
       "      <td>0.24</td>\n",
       "      <td>2.18</td>\n",
       "      <td>7.80</td>\n",
       "      <td>0.86</td>\n",
       "      <td>3.45</td>\n",
       "      <td>1480.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>13.24</td>\n",
       "      <td>2.59</td>\n",
       "      <td>2.87</td>\n",
       "      <td>21.0</td>\n",
       "      <td>118.0</td>\n",
       "      <td>2.80</td>\n",
       "      <td>2.69</td>\n",
       "      <td>0.39</td>\n",
       "      <td>1.82</td>\n",
       "      <td>4.32</td>\n",
       "      <td>1.04</td>\n",
       "      <td>2.93</td>\n",
       "      <td>735.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>173</th>\n",
       "      <td>13.71</td>\n",
       "      <td>5.65</td>\n",
       "      <td>2.45</td>\n",
       "      <td>20.5</td>\n",
       "      <td>95.0</td>\n",
       "      <td>1.68</td>\n",
       "      <td>0.61</td>\n",
       "      <td>0.52</td>\n",
       "      <td>1.06</td>\n",
       "      <td>7.70</td>\n",
       "      <td>0.64</td>\n",
       "      <td>1.74</td>\n",
       "      <td>740.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>174</th>\n",
       "      <td>13.40</td>\n",
       "      <td>3.91</td>\n",
       "      <td>2.48</td>\n",
       "      <td>23.0</td>\n",
       "      <td>102.0</td>\n",
       "      <td>1.80</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.43</td>\n",
       "      <td>1.41</td>\n",
       "      <td>7.30</td>\n",
       "      <td>0.70</td>\n",
       "      <td>1.56</td>\n",
       "      <td>750.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>175</th>\n",
       "      <td>13.27</td>\n",
       "      <td>4.28</td>\n",
       "      <td>2.26</td>\n",
       "      <td>20.0</td>\n",
       "      <td>120.0</td>\n",
       "      <td>1.59</td>\n",
       "      <td>0.69</td>\n",
       "      <td>0.43</td>\n",
       "      <td>1.35</td>\n",
       "      <td>10.20</td>\n",
       "      <td>0.59</td>\n",
       "      <td>1.56</td>\n",
       "      <td>835.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>176</th>\n",
       "      <td>13.17</td>\n",
       "      <td>2.59</td>\n",
       "      <td>2.37</td>\n",
       "      <td>20.0</td>\n",
       "      <td>120.0</td>\n",
       "      <td>1.65</td>\n",
       "      <td>0.68</td>\n",
       "      <td>0.53</td>\n",
       "      <td>1.46</td>\n",
       "      <td>9.30</td>\n",
       "      <td>0.60</td>\n",
       "      <td>1.62</td>\n",
       "      <td>840.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>177</th>\n",
       "      <td>14.13</td>\n",
       "      <td>4.10</td>\n",
       "      <td>2.74</td>\n",
       "      <td>24.5</td>\n",
       "      <td>96.0</td>\n",
       "      <td>2.05</td>\n",
       "      <td>0.76</td>\n",
       "      <td>0.56</td>\n",
       "      <td>1.35</td>\n",
       "      <td>9.20</td>\n",
       "      <td>0.61</td>\n",
       "      <td>1.60</td>\n",
       "      <td>560.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>178 rows × 13 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        0     1     2     3      4     5     6     7     8      9     10  \\\n",
       "0    14.23  1.71  2.43  15.6  127.0  2.80  3.06  0.28  2.29   5.64  1.04   \n",
       "1    13.20  1.78  2.14  11.2  100.0  2.65  2.76  0.26  1.28   4.38  1.05   \n",
       "2    13.16  2.36  2.67  18.6  101.0  2.80  3.24  0.30  2.81   5.68  1.03   \n",
       "3    14.37  1.95  2.50  16.8  113.0  3.85  3.49  0.24  2.18   7.80  0.86   \n",
       "4    13.24  2.59  2.87  21.0  118.0  2.80  2.69  0.39  1.82   4.32  1.04   \n",
       "..     ...   ...   ...   ...    ...   ...   ...   ...   ...    ...   ...   \n",
       "173  13.71  5.65  2.45  20.5   95.0  1.68  0.61  0.52  1.06   7.70  0.64   \n",
       "174  13.40  3.91  2.48  23.0  102.0  1.80  0.75  0.43  1.41   7.30  0.70   \n",
       "175  13.27  4.28  2.26  20.0  120.0  1.59  0.69  0.43  1.35  10.20  0.59   \n",
       "176  13.17  2.59  2.37  20.0  120.0  1.65  0.68  0.53  1.46   9.30  0.60   \n",
       "177  14.13  4.10  2.74  24.5   96.0  2.05  0.76  0.56  1.35   9.20  0.61   \n",
       "\n",
       "       11      12  \n",
       "0    3.92  1065.0  \n",
       "1    3.40  1050.0  \n",
       "2    3.17  1185.0  \n",
       "3    3.45  1480.0  \n",
       "4    2.93   735.0  \n",
       "..    ...     ...  \n",
       "173  1.74   740.0  \n",
       "174  1.56   750.0  \n",
       "175  1.56   835.0  \n",
       "176  1.62   840.0  \n",
       "177  1.60   560.0  \n",
       "\n",
       "[178 rows x 13 columns]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.DataFrame(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "eb08480e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "打印做标准化处理后的数据形态：\n",
      "(178, 13)\n"
     ]
    }
   ],
   "source": [
    "# 标准化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "stdsc = StandardScaler()\n",
    "X_train_std = stdsc.fit_transform(X)\n",
    "print('打印做标准化处理后的数据形态：')\n",
    "print(X_train_std.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "1c833d54",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "打印主成分提取后的数据形态：\n",
      "(178, 2)\n"
     ]
    }
   ],
   "source": [
    "# 导入 PCA 模块\n",
    "from sklearn.decomposition import PCA\n",
    "# 设置主成分数量为2\n",
    "pca = PCA(n_components=2)\n",
    "reduced_x = pca.fit_transform(X_train_std)\n",
    "print('打印主成分提取后的数据形态：')\n",
    "print(reduced_x.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "08b58e6d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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IxEbXIjIWSKySkRWbd5s6ciN5mNwEK680vn5yiudYyOY119/nUmTJpnwD0BEmDRpUlWzo8wUgIicCLygqqujrlPV61V1pqrO3GuvMWGshlFoXOG/datzvHWrKYFKmPAPp9p3k+UM4EjgJBF5Dvge8AERuTnD/hhGQ/ELfxdTAkajyEwBqGqfqk5W1ak4Od3vUtXPZNUfw2gkQ0OOzd8v/F22bnW+HxpqbL+M1iJrH4BhtCTTpjkO34kTg7+fONH53qKC6sS/30lK+5/09/fzla98JZW2XX7+85/z7ne/mwMOOIAvfzlwO+uqyYUCUNUVqnpi1v0wjEbS1weXXjpWCUyc6Jy3aKA66e+H888fEfqqznF/f5a9qonh4WE+//nPc/vtt7Nu3Tq++93vsm7durrbzYUCMIxWxa8ETPgnhCq8/DIsWTKiBM4/3zl++eW6ZwLLli3j0EMPpauri1NPPXXUdzfccAPve9/76Orq4uSTT2Zr2c536623MmPGDLq6ujjmmGMAeOKJJzjiiCPo7u7m0EMP5emnnw6830MPPcQBBxzAtGnTGDduHJ/61Kf48Y9/XNczAE7saFHK4YcfrobRjAwMqILzaYSzbt26+BeXSqq9vc6LdUtvr3O+Dh5//HF917vepZs3b1ZV1S1btujChQv16quvVlXVF198cee18+fP16VLl6qq6owZM3TTpk2qqvrSSy+pquo555yjN998s6qqvvHGG7p169bAe95666165pln7jxetmyZfv7znw+8NugdAas0QKbaDMAwckBfH6xfbyP/RBGBRYtGn1u0yDlfB3fddRcf//jH2XPPPQF4y1veMur7xx9/nKOPPppDDjmEW265hSeeeAKAI488kjPOOIMbbriB4eFhAGbPns3AwABXXXUVv/vd75gwYULgPTVgxpJEOKwpAMPICebwTRjX7OPF6xOouVmNFL5nnHEG1157LY899hgLFy7cuTDrG9/4BldeeSUbN26ku7ubLVu28OlPf5rbbruNCRMmcMIJJ3DXXXcFtjl58mQ2bty483jTpk287W1vq+s5wBSAYRjNiNfm39sLpZLz6fUJ1MjcuXP5wQ9+wJYtWwD405/+NOr7V199lX333Zft27dzyy237Dy/fv16Zs2axRe/+EX23HNPNm7cyNDQENOmTaOnp4eTTjqJRx99NPCe73vf+3j66ad59tln2bZtG9/73vc46aSTan4GlzwkgzMMw0gWEdhjD0fou2Yf1xy0xx51mYGmT5/O/PnzOfbYY2lvb+e9730v3p0Kr7jiCmbNmsU73vEODjnkEF599VUALr74Yp5++mlUlblz59LV1cWXv/xlbr75Zjo7O9lnn31YsGBB4D07Ojq49tprOeGEExgeHuZzn/sc06dPr/kZXCTItpRXZs6cqbYjmNHqtHLW0CeffJKDDjoofgXV0cLef9yEBL0jEVmtqjP915oJyDAKxOAgvPOdliYiNn5h3+TCv1rMBGQYBcGfNRQsaqjZ2LJlC3Pnzh1zfvny5UyaNCnx+5kCMIwCEJY1FEwJNBOTJk1izZo1DbufmYAMI+dY1lAjLUwBGEaOsayhRpqYAjCMHGNZQ400MQVgGDnHsobWj82QgjEFYBSeVvjntqyhtdOI0NlG7Afwuc99jr333psZM2Yk1qYpAKPQtFJcvKsEwIR/XPyhs0X+OznjjDP4+c9/nmibpgCMwtJM/9xxsayh8QkLnU3i76TR+wEAHHPMMWMyj9ZNUI7oRhRgPPAQsBZ4Ari8Uh3bD8BwGRhQnThxdKr3iRMtn36zE3c/gKC/j6T+TrLYD8Dl2Wef1enTp0deU5T9AN4APqCqXUA38CEReX+G/TEKgsXFG1GkHTqbxX4AaZGZAigrptfKh53lUpzMdEYmWFy8UYm0Q2c1g/0A0iJTH4CItIvIGuAF4E5VfTDL/hj5J4u4eFMmxSPN0Nks9gNIi0wVgKoOq2o3MBk4QkTGxDeJyFkiskpEVm3evLnhfTTyRyPj4lspyqjZSCt01rsfQFdXFxdccMGo7939AD74wQ/ynve8Z+f5iy++mEMOOYQZM2ZwzDHH0NXVxfe//31mzJhBd3c3Tz31FKeddlrofU855RRmz57Nb37zGyZPnsw3v/nN+h4E8rMpPLAQuCjqGnMCG168jr40HMBpt29UT1WbwpcZGHB+h63y+yuEE1hE9hKRPco/TwCOB57Kqj9G8UgzLj7NEEKjsVjobDhZpoPeF7hJRNpxTFE/UNWfZtgfo4D09cEnP1nZ5l/NLlqVoozc+xrFoSi5klpmPwBVfRR4b1b3N5qHSv/cg4NOZNDAwIjgDlMIbpRRGG6UURylYxjVYvsBGEaCBK0WjnLsWvZNo5WwHcGMpiXIjr9wobMeFMLNOe6x3wxUpARsrbxxvBEfmwEYTUmYHX/7dtixw/k5yrFb5OybFrpqxMVmAEbTUcmO7yXKseseX3JJsYS/bRxvxMVmAEbT4K7YrWTH9xOVPqJIIYQWupodae8HsHHjRo477jgOOuggpk+fzpIlSxJp1xSA0RT4zR5hq4WDqOTYrceW3qg0EpYgr7np6Ojgq1/9Kk8++SQPPPAAX//611m3bl3d7ZoCMApP2L4AfiXQ2QkdPqPn+PHpmXfStMV7FYslyItm5caVDN43yMqNKxNrs9H7Aey7774cdthhAOy6664cdNBBPP/88/U/SNDy4LwWSwVh+ImzL4A3FcDAgGpnp3Pc1pZeioA000gEpTZIM/99nqg2FcT9G+7XCVdO0PbL23XClRP0/g33192HLPcDUHX2BNhvv/30lVdeCfy+EKkgDKNe4po9/HZ8Nwy0VHI+kzaRXHxxerb4iy6KN9txKVL0UhqseG4F24a3MazDbBvexornVtTdZpb7Abz22mucfPLJLF68mN12263uZ8l8VF9NsRmA4bJ+ffBo11/Wrx+pEzVKHj8+mVHyvHnhfal3JB7UdtBsp5kT2OVhBrBkyRKdP3/+qHPeGcDUqVN1zZo1qqp644036umnn77zugceeEAvu+wynTx58s6ZwjPPPKNLlizR/fffX5cvXx56323btum8efP0q1/9amT/qpkBZC7UqymmAAwv1Zg9oq51S0dHfQLzwgurV0pxiatY1q9v7uyXtWQDvX/D/Tpw70Aiwl/VMQEdeOCBOwW43wQ0adIk/eMf/6jbtm3T448/fqcCeOaZZ3a20d3drY888oiuX79eS6WSqqr29vbqokWLAu9ZKpX01FNP1d7e3or9MwVgtAxhgn3evJFr4s4W6hHQcRRMrSPyiy6K12/3uoGB2p6hCNSiANLg29/+tk6fPl0PPfRQPf3000cpgOuuu06nTp2qxx57rJ5zzjk7FcBHP/pRnTFjhk6fPl17enq0VCrpwMCAHnzwwdrV1aUnnHCCbtmyJfB+9913nwJ6yCGHaFdXl3Z1denPfvazwGtNARgtRRxHcNQI2ls6O52RfL33jyP84wjpuG3Pm5eM6SfviiMvCiDPmAIwCke9gifKPl7tDMA/g4jqb9y2L7podP04Zpq4bR91VGUFGIcimI5MAVTGFIBRKOoVPHF8AXFnAFFCO6y/lUbpfmXivb6S87lS2wcckEz4Z1Gcx82uAF588cWdJh5v8YaWVsIUgFEY6hU8tYzu45ag/oT1N8wM5TcnBV1XyfkcpgSOOirec1SaXcUxoeWFdevW7XSaGmMplUqmAIxikJTgiTMDiGNLr6QEKvW3kjKL6kM1SmDiRNUzz4z/7PW+uzwxNDSkmzdvNiUQQKlU0s2bN+vQ0NCY78IUgGUDNTIhyW0Xq8nf77+mo2MkPXQQbhqFLVvgX/4lXn+DsodWylC6Y0f0TmPeto86Cr75TSfNRD17FxRx97PJkyezadMmNm/enHVXcsn48eOZPHly/ApBWqERBdgPuBt4EngC6K1Ux2YAzUEti7jiEMec5L/mwgujTSnjx8cPw/Q6hsP619ERXr+zs/KI+6KLKpugarX9pzkDyHt0UbND3kxAOJvCH1b+eVfgt8DBUXVMATQPaQmeSg5l70Ipr2M4KJLGFdaVTEhx+1uv4otjgop69qh3lqYPIM7vxEiX3CmAMR2BHwMfjLrGFEBxCfonT0vwRAlQVxBddNHo0Xhn5+hY+o6OkaRxXj+Ce66aUbu/D/424jx7XAVUqzBNKwoojl+kFqVlVEeuFQAwFdgA7Bbw3VnAKmDVlClT0no/RopE/ZM3KvzQe5+OjpFMoH5h7s4K/ELaXWzlN+HUkj4iSAlEPXtaJrOgfiUpjOt1mhvJkVsFAOwCrAY+VulamwEUj7h2+UqCpx7hVk0EUFubant7vGvrmbUMDDj+hbj1i2arr9Rf72wrjecwRpNLBQB0AncAF8S53hRAsajGxBMleOoZmdYa/llLqcVpXc1zFSVev561GXl8nmYgdwoAEGAZsDhuHVMA+SZu6uVGrVCtRRC1tUVH6iQttNKIdMoD9SpecwwnSx4VwFGAAo8Ca8rlw1F1TAHkF+9oNimbdRIj3moEkevQDbtvXswWRXGcVvMebQaQLrlTALUUUwD5JGhUmqcVqmHpF7yOYH80T9hIOy8j8KKMkOO8RxP+6WMKwEiFqH/kWv/J04h6CVNSblvVOKeLMgLPC1HvMQ/KtBUwBWAkhit444zS87RCNUgQrV8frUjCvivKCDwvxFmbYaSHKQAjEdx/2GrSI+RphaoJ7vxhv5P0CVMAbfGzBhmtjpvADeC662DePCfpWBATJ8LAgJNErK8P1q+Pn9zNpa/PSWjm3iNOgrNK5CWpWRIMDWXdg2Ropt9J0TAFYMTCn71z61b41a+czJR+JRAkqGv9J3eVANQv/JuJwUEnG+jg4OjzrlJIWjk0i7IxfARNC/JazASUDdWs6kzLmWdmAgfXpBYWWQMj6Sxq+T2E5WxKsr16rjNqA/MBGLUQNyLnwgsrCwnvP7n9w1ePK4j9C9WSWqMQJOjridSJqzjMEZw+pgCMmokbkRMk1L0RQ+4/uf3DV09QArk4Ja7QjruWo5726rnOqA9TAEZd1CIMvCaJqDTLRjTexHG1lDi/J//vtrMzPCVGpXxOcf9WbDFY4zAFYKhqclk1axEqScb055G7706+zSST2cXdk6GW9oKUfdTvOo11HkY4pgCMREwvcdqoVqg0wz+863idNy+5NuvJqhl3xJ5Ee9X+vu++u3oFY9SHKYAWJ0lba6XUzUmMKIuEd2vJpJVApffZ0VFfcrWo9oPMQPUIf5sBZIcpgBamEbZWN6VCkiPUPOJXUn7h3ygl4PpRkkiuFjefU1LCP859jWQxBdCiNGKk5Y/waVbzj9/8FSb801YC7jvzK6N61gFUEvT+9qpR9hYFlD2mAFqQRuwlGxY+GBZBItLYKKA0tjicOFH1zDPjvdskHcNx/C/u89by3FHtV+tAdtcmxFFEFhacPqYAWpQ0ZwBhU/h588Jj1r0br6f9D5+UYAl7zgMOiBb+lWYAtQjptP0k9exQFvR3ZSuB84EpgBYmDVtrveGJaYRMhvWvnmetpEDDlEAl4d9Mo14z4+SfmhQA0A78A3AFcKTvu0uj6qZRTAHUTtJRQLUK/kYIiKQUXtznPOqo6oV/UQWm5fUvJrUqgH8DvgOcB6wGrvF893BU3TgF+BbwAvB4nOtNAdRHkv+kcey/WUR4JG3yitte3HUARY58qfT3Y2ac/FKrAnjU83MHcD3wI+BNwCNRdeMU4BjgMFMAjSPJf9JKwsz7/fjxjXH4xhmxJ23ndqlk1ipy7HuRZy1G7QrgqYBzC4BfA09H1Y1bgKmmAIpLJcHgjhobZR5IS8jWKwAbEZGVFkWetRgOtSqAm4EPBZz/O2B7VN24pZICAM4CVgGrpkyZkuIrMmolKhX0wMBIIrNGCY20BFa9JrQizgCK2GdjLLmNArIZQLFxheJFFwV/V60gTituPylBVW//0lJOaYSUFnnWYoymbgUA/CXwaeA0t8StW6FdUwAFpdY0AWECL+lIkrxGpiStnGp5zsg6pZKvryWbARScuhQA8O/A/cB1wNfKZWmcujHaNgVQQKJGsrWMHPM6Yk+LNBap1ZL7Z0ydhQtVe3tHlECppAOzb9OJnW+Y8C8w9SqAJwGJc201Bfgu8HtgO7AJODPqelMA+SDO6L6aGUAlZdKsZGFOiqxTKjnCH0aUQPl4YPZtO2cCJvyLR70K4FZg3zjXpllMAWRPNaP7OAIqSlG4+YQaET5aNGo1sVWs41UCbikrg7ya1IzK1KsA7gZeAu4AbnNLnLpJFlMA+aDW0b3/u7jKJM01BEUUarWY2KqqUyqNPunxCRRRWRr1K4Bjg0qcukkWUwD5oRrzQ5SQjZtTKA2zQ5EXN2UxAzCKSxJRQG8FTiyXvePWS7KYAsgX1QjQJHYRS1JIN8Pipkb6AEwJFJt6ZwB/C/wOuAlYBjwLfDxO3SSLKYD8kWQ0i7tgrBrTRq33apbFTY2IAtLeXtUFC0Y3YsqgUNSrANZ6R/3AXsDaOHWTLKYA8kmSi7cgfC+BpBZMNULJNJI01wGoqiP8g5TCwoW1ddhoOPUqgMd8x23+c40opgCan7jRQ/XQTDMAl9Q2lzGzUFNQrwK4uhwBdEa53A5cFaduksUUQOuQtoM2yORUVOGfOuYYLjxhCqCNGKjqxTipoA8FuoDrVfWf4tQ18sfKjSsZvG+QlRtXZt2VUPr64NJLnZ8vvdQ5TprXX4fOTufniRPTu0/hEYFFi0afW7TIOW8Umo64F6rqD4EfptgXowGs3LiSucvmsm14G+Pax7H8tOXM3m921t0KpK8PPvlJmDYt2XYHB+HKK52fnQmuCf9IVOH880efO+88WLx4RAmoVqcQ/NdXW99IhMgZgIj8qvz5qoj82VNeFZE/N6aLRpKseG4F24a3MazDbBvexornVmTdpUjSEv5btzrHO3bA+PHJ3qOpcIX/kiXQ2wulEsyaBUuXOkrANQqdfz7098drs7/fud7VvtXWNxIjUgGo6lHlz11VdTdP2VVVd2tMF40kmTN1DuPax9Eu7YxrH8ecqXOy7lLiDA0Fn/cLf5fXX3fODw6m37fCIQJ77OEIf9cMNGuW8/ngg86nqyBefnlEqIeh6ly3ZMmIEqimvpEsQY4BfwHeCbyp/PMcoAfYI07dJIs5gZPh/g3368C9A3r/hvuz7krihIU3NmP4Z0PxOnxLJdWentqdwuZUbjiEOIFFY2hcEVkDzMRJ3ezmA3q3qn44BZ0UysyZM3XVqlWNvGWqrNy4khXPrWDO1Dm5tcMXCe8IP8ipGzYDAHMCV40qtHkMCKVS9T6AeuobVSEiq1V1pv98rCggoKSqO4CPAotV9Xxg3yQ72Gq4ztjL7r6Mucvm5joipwj4hfvWrWPNOm5k0cSJo+ua8K+SIKew16afdn0jMeIqgO0icgpwOvDT8rnOdLrUGjTKGRtmD28mwkb2cZRAywl/v5CtVugGOYV7e0fb9NOoX2+/jUDiKoDPArOBL6nqsyKyP86G8UaNNMIZOzgI73xnczs3h4bgkkuCzTrgnL/kktGKsBFrDHJJEtE3fqewu0agt9c5H2bGce/p1u/piV/foobSI8gxkNfSbE7gNJ2xRU51XC21pnZoKYdv0ikd/NdH1Q9KMNfTMzqXUFh9S0WRCNSZCuJI4E7gt8AQTjbQoTh1kyzNpgDSohlSHVdLKz5z1WQRfZOEALeoobqpVwE8BfwVsDcwyS1x6lZo90PAb4BngC9Uut4UQGWaMdFZXFpp1lMzEbt9RdaJOo5Tv14BXku/jZ3UqwAejHNdNQVoB9YD04BxOCmnD46qYwogGot1L+YWjw2jFkEctj9Atamg6xHgNgOomzAFENcJfLeIXC0is0XkMLfU5XyAI4BnVHVIVbcB3wM+UmebLc20aTAwMDbM0WXiROf7pNMr5Im+Pli/voUcu5VQn+O0mugb1WRW7br1vMQN+/T1e+iZKqOOjEjiJoMrr/3Gu5BAgQ/Uce+3Axs9x5s899mJiJwFnAUwZcqUOm7XGriCzx8W2Urhjk2j4FTrS5jW3+8IajfaZvfdobvb+fRm+AyLvvFes2SJU2B0BFCcZ/AqnkWLRo6hcjueqKPBvRdxyQHCwJcW0dcb0e9aqPddF5WgaUEjCvAJ4N88x6cCX4uqYyag+Jg9vODUa3qJ63yN6wOIY74J8xVEPUtM/8LAl0qj/56/lKD5JykzV46hTh/AW4FvAreXjw8GzoxTN6LN2cAdnuM+oC+qTiMVQDPkyymSPbwZ3ndiJBU5E9N2HukTimt/ryREgwR9TMGbaoRXi4SZ1qsAbsfZGH5t+biDOreELLcxBOzPiBN4elSdRimA+zfcrxOunKDtl7frhCsnFFooFcHh20zvOzHqcXx6BWuF0XvFvYHjziKqFaIx6zQkqq0FnMz1KoD/Ln8+4jm3Jk7dCu1+GGdtwXpgfqXrG6UABu4d0PbL25V+tP3ydh24twBD6AJj7zuEWkM2XWHW0zM2a2dPT6BwDRWmcc0jtQjRCnUaGtXW5GGm9SqAFTix/w+Xj98P3BOnbpKlVWcAzW4eydv7bihhNvB6RqVB6Zq9yqC3d5RNveKIOu46gFoVVoUZStgMAFTnzat8i1h9sBlApAI4DPg18Er587fAoXHqJlla0QcQJhzr6V9ens1LHvuUOmGj6wULkvEB+AVruZ2BD9yZvFklhRmAy7x54QqgbjOQ+QBim2s6gOnADKAzbr0kS7NHAd2/4X49+ydn69k/OXunIAwyj9QzYm7p0XaeqCR4XCVQS2RKhGBd/0wpebNKij6AhpiBWjgKKNY6ABFpL9vrp5YVwTwRQVWviVPfqMzKjSs57qbjeGP4DQC+teZbrDh9xc6soe4m7nOmzglMJR13Q5lla5fx+o7XUZRtw9tYtnbZmE1pbKOaBhAnxl51JBbdvb5SbLpqZNz9tEWLGBiovDFOVWspwjKEQvQagxh13MWNifbXT39/be+6CYi7EOwnwOvAY0Apve60Lq5Qd9k+vJ0Vz62g7+g+lp+2fIxAdpVCe1s7G17ZwMqNKysK65UbV/KtNd9CUQDapI0b19zIjtIOxrWPY/lpywGYu2zuToWz/LTlpgTSwhU0rvCH0YLHL4DiCKQYgjWVxYK1CNGYdRqyuLGWd90ExFUAk1X10FR70uK4I313BtDZ3rlzj4DZ+80eJYRn7zeb5actZ9naZdy45kZuePgGblp7U0VhveK5FQyXhgEQhPfu815W/371mE1pap1dGFXijta9nH9+/aPPGILVL1QTEaa1KqwYdVLprxE7F9DtIjIv1Z60OLP3m83dp9/N2YefzdmHn82K01cAMHjfYOB2kbP3m82U3aewo7Qj9q5irpJpo432tnbm7D92U5pGbFRjMNZUU+3OWpWIIViLtjFO0fpbBOJuCv9RnB3A2oDtgACqqrul273RNNum8FG4ewZHmWLiXOPn+tXXc85/ncOwDvOm9jex+EOL2bJ1i/kAssCfq8dVCnvs0dDdroaGarChe2cYQccpUlN/W5ywTeHjmoC+ipO64TGNozGMuglz9PqFs98/UEl4b9m6hZKWKGmJbcPb2LJ1C31Hjx5K+U1ORkrkxPk4bX/FGdOVqSTMM1ZckcI/Q8VUROIqgKeBx034N46g6J+wEb935F5pRhDUrpEhWTsfqxXmqiMpolVh8eIRU1ZPT7TAdb8L+2z0sxixFcDvgRUicjvwhnuyKGGgRTRpBI3uB+8bjHTQxgkPDWrXaFFqEebuLOWBB2DpUqeAcz3A5ZcHC1tXOO++O7zyClxzDVxwwchxvULa+ywwOvy1t9dmAiHEVQDPlsu4cikMtdjJ86Iw/KaYSqP3uKN7M/EYQO3CHGDWLHjwwdHnli4NFrZe4dzdDWvWwD33OJ/ucb1COmpdxTXXmPAPIZYCUNXL0+5IWlS7aKoWhdEoKo3eveGhhhGbaoR5GEuXOoojyIfhF87gCH33M+4GM2H2fffT3fTGizvT8M8wzFcAVAgDFZHF5c+fiMht/tKQHtZJtWGNQQojbVZuXBka7uln9n6z6Tu6L1Ip3bT2Jm54+AbmLpsbq03DGEWUMHft6u41cfEqAT9xhH9//+jwWLcfc+aMnC+V4DafWDr88LFbWIa11YJ+gkozgH8vf34l7Y6kRbU270Y7SZOecdSTJsJoAqoZ2fqFuWsCisJdaRwk/P2ziKB7BVFp8VuUfb+7e8SHASMzCxfXzOSagcxXMJqgBEFBBdgL2Cvu9WmURqaDblRmyqRz4VuytxamlqRmCxcG7xswa1Z02mdPaunAY//1bqK37u7gz6jMm1G7mw0Pjz1/7rmjjxcsCO9P3MylBYeQZHCVTEAiIv0i8iLwFPBbEdksIgvSV03ZEcfMAsGmm2rMOVC9iaoS7ozniuOuyJX/wkgZVXjppdEric87b6z5w8/Chc6na/MvlZzR/YMPhq9IFoE3v3m07X7xYuc4KPmbNz/RSSc5n6tXjz4OSxrnmmtgrAlp0SJoaxt73t/OK6+Mfo4gc1SLJH8bQ5BWcAtwPnAnsL/n3DTgDuD8qLpplDylgw4aadc6+m7JXPhGstQykvfWrSUdctyNYvzfh30GXV9pd7OgGYD7XZwtLFt8BlDJB3Aa8EFVfdGjMIZE5DPAL4AQr040IvIJoB84CDhCVQuX3yHMWVyL/d3CMo260LJdO8gxO2tW5fq1rkiudhFbUIpr73HQ9YsWObMSr3/i3HOd75YuhXvvHR1JNHv2aF+EP8W0amS67FabCVRSAJ1e4e+iqptFpLOO+z4OfAz41zrayJQwZ7GtsjUajisoVeM5csPaiDquF1VnXYG7Utel0krdyy+PNin5w0hXrnRMX29+80g9f4rtavcuaGIqKYBtNX4Xiao+CSAFftlh0UW2ytbIDW5kT9YbnPT3O/4JcPrj2uMffNApYdE3rl/Dr9S8YaptbWNnFYsXj27L325OcjDlgUoKoEtE/hxwXoDxKfSnUASZbsycY2RGUBhmT0+2I1u/ecofbhq23iAO9W6cU00dv4KKMl0ViMgoIFVtV9XdAsquqhppAhKRX4rI4wHlI9V0UETOEpFVIrJq8+bN1VQ1jNbAtWs/+KAjUN29BVxB60b6ZIE7unb74x/N+0frft785rF+jZ6e0SaeavFHNoVFSLk08cKxuBvCVI2qHq+qMwLKj6ts53pVnamqM/faa6+0umsYxcVr13YFqit06xGUSfYvbBXw+ec7CsuPK3QXhEScu0otbWHuzmC84bWu0zgqvLYgxE0GZzQxbvK7SRMnjdkcxigIebRru/1x1yR4cSN5lixxEsOddJLj8HXruUJ3xQpYu3YkaVxX14hfw80kWksqa4i3CjgqyVzW7zcJgmJD0y7AR4FNOKml/wjcEadentYBNAvu2oW2y9uUfrStv81WEBv1464t8Mbp77236j77jMTen3tu+ErgUslZw+CP7e/pcc4vWDA2xj8o5t9PrWsASqXRdQq2ZoBaVgKnqHT+U1Unq+qbVPWtqnpCFv0wRtYzlNSZhpcoNSwJntGkeEfabs7/7m544QX4xCdGbPpf+1p0NtAjjhjb7tKlztqG/v4RM9eSJU40kDe2v9LaAi+VRvLuzMJLmOmqaARphbyWPM8A0lzNm3bbNgMwEidqpB1nNL1gwcjswFuOOGLsTKGakXm1MwB/HiPvjKa7e2yeoZxCyAwgc6FeTcmrAqiUAqIeAd6I5G5u//511b9aSgojOYKEcxwBPDw8NlmcW1wh7LZfqzCvxmzkVUauWStOErscEaYAzAmcAFEpmOtN99yI9M62dsFIHA0wm7iOYDfxXFgahrY2xykMY9M7jxs3NqVDT8/o7SxVg8NL464CVp8zuL/fiTq64IKmcwRn4gNoNqIyeta7wUzS2UINI3W8wtnNMOquA3DXKngFcFA20P5+OPro0e2eey489NCIYtl999G5jq65ZiSTqRtR5Mf1HfijpdyoobAw0S9+sSkziNoMIAGiNp2pd4MZ28TdKByVRtoLF8YLV33oobHtuiub3bxCs2aNXlzmppd4//vDV+uGrQLWiDDRnp6xoayVNrIpAkF2obyWvPoAKmHpno2WpNp00d7rvGmg/cdeR2xYmuha7fJBfgXvParxHeQIQnwAou5UpwDMnDlTV60qXOZowzCqpb9/JHNo0CIvr5nJT6lU36hc1fFDeNvzZjKNs+gsZ4jIalWdOea8KYB8467SzbP5pwh9NDLEb4oJM81UW88vqF3qcc4GKRa3PRevych7nGPCFID5AHJMWARRngRu0pvaGwWmVBo7cv7iFyuPnMMEfVTGTtWxNnl3gVmtm7v4ndf+KCV/6gko1CwgCFMAOSYsgihPArcRYapGAZgzxxGOq1c7SqBUgsMPh82b4fnnnWuCcu/UYlpxr3FXBbuRQN6U07WkwI5yXrvCv5o8QgXAFECOCYogypvArTfKyWgCSiVHOK5Z4wj91audzzVrnBQQH/tYcPw8VJ+cDcYKav95b5RRFEEzj6ikeq7Jp4nWApgPIOf4zT15NLnkySRl+KjV/l4t7ojfu3Cru9tRBu7iLu+1Xjt6mM09ziYtUJtNvpKTOeqeYc+SY8J8AJmHdlZTihoGmjQWVmrEws3I6YYpuuGLCxemc7/h4dHhk8PD8dI1VMrnE3Zc6/PVmhKi1kyiOQDLBdQ6mIIwahZyteLNj+PN23PuudF9qCRUw4R8remgg95PmnmEcoIpgBTJk8BtRPI4oyA0asTqT97mPd5nH0cJBI3SvQu6/HsHBB37ha73+1qer9pMoo2eUSVImAIwH0Cd5M0mP3jfIJfdfRnDOky7tHPFcVfQd3RfZv0xMkYbZLMOiwLafXe4++6xfgg3+seNrrnmmpG9A155JXrBl9dHUOvzVWo3ql4BN4cP8wFYMrg6qTfZW9JY8jhjJ66Q8+JNdJYkK1aMCH9wPlevds4HCUg3+scr/L3HriM2agOXWp/PK/y9yeq8+/6GEbU2oYgETQvyWvJoAmqUyaUaM1OeTFJGRuTdZh3XPBV2XSXzUBObc2qBPJmARORq4G+AbcB64LOq+nKlenk0AUH6YZB5MzMZBaHWUMdGUcl84x+p+9cJVLspfND9C2jOqYW8pYK4E+hT1R0ichXQB/xTRn2pm7Q3VMnb4i+jIEQtasqaMPONP1d/VFrpep+v2cw5NZCJAlDVX3gOHwA+nkU/isKcqXPoaOugNFyio63D7PpGfPIo5KJG9jBaiFcS8nl8vqRJcaaSh1QQnwO+H/aliJwFnAUwZcqURvUpdyg66rMStZqlbFWvkTpxt2b0Xh91XA1FM/ukbMZLTQGIyC+BfQK+mq+qPy5fMx/YAdwS1o6qXg9cD44PIIWu5p4Vz61guDSMogyXhiuagGr1GZivwWgYWZin8u4T8aNaW66kKkhNAajq8VHfi8jpwInAXM3CE10gwhKuhY3Wa/UZmK/BaCiNNN80QJgmjndmlFICukxMQCLyIRyn77GqujWLPhSJoH2Bo0brtWbotMyeRtPSAGGaCm6/vQvWEuxvVmGgzwBvAraUTz2gqmdXqpfXMNBKpGFXr7Ti13tPIPb9zQdgNDWNWhmdFLWuWPaRqzBQVT0gi/tmQVp29UqjdTc0tdr7px3SahiZOWLjhJ7miWqipWrEUkGkTFqpIlyz0BXHXREp1P33X7Z2GYP3DbJy48pE+mEYVdHfPzrdgivk0nbC1pP+ISvCoqV6e2vb8SyAPISBNjVp2tXjjNa9929va+fGNTeyo7TDonyMxpOlI7ba0NO8kHK0lGUDbQBZ29Xd+294ZQM3PHzDTr/B3x/290zZfYrZ+43GkZBNu677F2kdQEKE+QBMAbQQXn9AR1vHznUFac4GslZ+Rg4pmiO2CbB00MYov8Fnuz/LcGk41TTWrsK57O7LmLtsrvkdjMamqE4Lf1+L1HcfpgBajNn7zabv6D5O6zot9X0D8rZXgpExRXTE+snKiZ0S5gRuUYIWlyWNLSwzRlFUR6xLEVcTV8B8AEaqmA/AGEORHbFZO7FrxJzABgDXr76eH677IScffDJnHX5W1t0xjOJRQCd2rlYCG9lw/err+Yef/gMAvxhytmQwJWAYVVC01cQVMCdwC/HDdT+MPDYMI4JmcGL7sBlAC3HywSfvHPm7x4ZhxCSuE7tAPg7zAbQY5gMwjDqJEvA53XTGfAA5JMkImbhtnXX4WSb4DaMewjayKWCYqCmAjEgyTbRt5WgYOaCAm86YEzgjklwlaytuDSMneJWAS06FP5gCyAx3lWwSqRiSbMswjDooWK4jMwFlRJKpGBqR1sEwjAo0YAevpMlqU/grgI8AJeAF4AxV/Z8s+pIlSW6/aFs5GkbGFDDXUVabwu+mqn8u/9wDHNzMm8IbhtFC5HAdQK72A3CFf5m/APJpIDMMw6iWsDDRHJKZD0BEvgScBrwCHBdx3VnAWQBTpkxpTOcMwzBagNRMQCLyS2CfgK/mq+qPPdf1AeNVdWGlNs0EZBiGUT0NXwmsqsfHvPQ7wM+AigrAMAzDSI5MfAAicqDn8CTgqSz6YRiG0cpk5QP4soi8GycM9HdAxQggwzAMI1kyUQCqanmIDcMwMsZSQRiGYbQopgAMwzBaFFMAhmEYLYopAMMwjBbFFIBhGEaLYgrAMAyjRTEFYBSKlRtXMnjfICs3rsy6K4ZReGxDGKMw2N7HhpEsNgMwCoPtfWwYyWIKwCgMtvexYSSLmYCMwmB7HxtGspgCMAqF7X1sGMlhJiDDMIwWxRSAYRhGi2IKwDAMo0UxBWAYhtGimAIwDMNoUUwBGIZhtCiiqln3ITYishlnD+E02RN4MeV7FBV7N+HYuwnH3k0wjXwv71DVvfwnC6UAGoGIrFLVmVn3I4/YuwnH3k049m6CycN7MROQYRhGi2IKwDAMo0UxBTCW67PuQI6xdxOOvZtw7N0Ek/l7MR+AYRhGi2IzAMMwjBbFFIBhGEaLYgogAhG5SERURPbMui95QUSuFpGnRORREflPEdkj6z5liYh8SER+IyLPiMgXsu5PXhCR/UTkbhF5UkSeEJHerPuUN0SkXUQeEZGfZtUHUwAhiMh+wAeBDVn3JWfcCcxQ1UOB3wJ9GfcnM0SkHfg68FfAwcApInJwtr3KDTuAC1X1IOD9wOft3YyhF3gyyw6YAghnEfCPgHnJPajqL1R1R/nwAWBylv3JmCOAZ1R1SFW3Ad8DPpJxn3KBqv5eVR8u//wqjqB7e7a9yg8iMhn4a+DfsuyHKYAAROQk4HlVXZt1X3LO54Dbs+5Ehrwd2Og53oQJuTGIyFTgvcCDGXclTyzGGWCWsuxEy24JKSK/BPYJ+Go+cAkwr7E9yg9R70ZVf1y+Zj7ONP+WRvYtZ0jAOZsxehCRXYAfAuep6p+z7k8eEJETgRdUdbWIzMmyLy2rAFT1+KDzInIIsD+wVkTAMXE8LCJHqOofGtjFzAh7Ny4icjpwIjBXW3shySZgP8/xZOB/MupL7hCRThzhf4uq/ijr/uSII4GTROTDwHhgNxG5WVU/0+iO2EKwCojIc8BMVbVshjhRL8A1wLGqujnr/mSJiHTgOMLnAs8D/w18WlWfyLRjOUCc0dNNwJ9U9byMu5NbyjOAi1T1xCzubz4Ao1quBXYF7hSRNSLyjaw7lBVlZ/g5wB04Ts4fmPDfyZHAqcAHyn8na8ojXiNH2AzAMAyjRbEZgGEYRotiCsAwDKNFMQVgGIbRopgCMAzDaFFMARiGYbQopgCMpkREhsuhh0+IyFoRuUBE2srfzRSRpRn16/466p5TzjpqGWqNRLAwUKMpEZHXVHWX8s97A98Bfq2qC7PtWe2IyHuBl4AV2OJEIwFsBmA0Par6AnAWcI44zHFzsItIv4jcJCK/EJHnRORjIvLPIvKYiPy8nM4AETlcRO4RkdUicoeI7Fs+v0JErhKRh0TktyJydPn89PK5NeW9Ew4sn3+t/CnlvRUeL9/rk+Xzc8pt/kd534VbyqtqUdVHVPW5Br8+o4kxBWC0BKo6hPP3vnfA1+/ESc37EeBm4G5VPQT4f8Bfl5XA14CPq+rhwLeAL3nqd6jqEcB5gDvDOBtYoqrdwEycvEFePgZ0A13A8cDVrlLByZx5Hs4eA9NwVtUaRuK0bDI4oyUJyt4JcLuqbheRx4B24Ofl848BU4F3AzNw0l9Qvub3nvpuorPV5esBVgLzy3nff6SqT/vueRTwXVUdBv4oIvcA7wP+DDykqpsARGRNuc1fVfmshlERmwEYLYGITAOGgRcCvn4DQFVLwHZPhtMSziBJgCdUtbtcDlHVef765fY7ym19BzgJZxZxh4h8wN+liO6+4fl5Z5uGkTSmAIymR0T2Ar4BXFtj+urfAHuJyOxye50iMr3CPacBQ6q6FLgNONR3yb3AJ8v7wu4FHAM8VEPfDKNmTAEYzcoENwwU+CXwC+DyWhoqb/f4ceAqEVkLrAH+skK1TwKPl0047wGW+b7/T+BRYC1wF/CPlfabEJEeEdmEs+/AoyKS6XaCRvGxMFDDMIwWxWYAhmEYLYopAMMwjBbFFIBhGEaLYgrAMAyjRTEFYBiG0aKYAjAMw2hRTAEYhmG0KP8fe9tfXdqpH5YAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 经过 PCA降维的数据可视化情况\n",
    "for m,c,i,target_name in zip('xD.','rbg',[0,1,2],wine.target_names):\n",
    "    plt.scatter(reduced_x[y==i,0],reduced_x[y==i,1],c=c,marker=m,label=target_name)\n",
    "\n",
    "plt.title('wine-standard-PCA')\n",
    "plt.xlabel('Dimension1')\n",
    "plt.ylabel('Dimension2')\n",
    "plt.legend(loc='best')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "a2684f7d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "'''\n",
    "python用matplotlib 用matshow（）绘制矩阵，绘制矩阵图\n",
    "'''\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "mat = np.arange(0, 100).reshape(10, 10)\n",
    "plt.matshow(mat, cmap=plt.cm.Reds)#这里设置颜色为红色，也可以设置其他颜色\n",
    "plt.title(\"matrix A\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "a34910b4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1152x177.231 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 使用主成分分析绘制热力图\n",
    "plt.matshow(pca.components_,cmap='plasma')\n",
    "plt.yticks([0,1],['Dimension1','Dimension2'])\n",
    "plt.colorbar()\n",
    "# plt.xticks(range(13))\n",
    "plt.xticks(range(len(wine.feature_names)),wine.feature_names,rotation=60,ha='left')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f4f0f93a",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8839ca15",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "94f2fa57",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "aabf8c80",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f3bbc98a",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "id": "c654e245",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "      <th>0</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14.23</td>\n",
       "      <td>1.71</td>\n",
       "      <td>2.43</td>\n",
       "      <td>15.6</td>\n",
       "      <td>127.0</td>\n",
       "      <td>2.80</td>\n",
       "      <td>3.06</td>\n",
       "      <td>0.28</td>\n",
       "      <td>2.29</td>\n",
       "      <td>5.64</td>\n",
       "      <td>1.04</td>\n",
       "      <td>3.92</td>\n",
       "      <td>1065.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>13.20</td>\n",
       "      <td>1.78</td>\n",
       "      <td>2.14</td>\n",
       "      <td>11.2</td>\n",
       "      <td>100.0</td>\n",
       "      <td>2.65</td>\n",
       "      <td>2.76</td>\n",
       "      <td>0.26</td>\n",
       "      <td>1.28</td>\n",
       "      <td>4.38</td>\n",
       "      <td>1.05</td>\n",
       "      <td>3.40</td>\n",
       "      <td>1050.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>13.16</td>\n",
       "      <td>2.36</td>\n",
       "      <td>2.67</td>\n",
       "      <td>18.6</td>\n",
       "      <td>101.0</td>\n",
       "      <td>2.80</td>\n",
       "      <td>3.24</td>\n",
       "      <td>0.30</td>\n",
       "      <td>2.81</td>\n",
       "      <td>5.68</td>\n",
       "      <td>1.03</td>\n",
       "      <td>3.17</td>\n",
       "      <td>1185.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14.37</td>\n",
       "      <td>1.95</td>\n",
       "      <td>2.50</td>\n",
       "      <td>16.8</td>\n",
       "      <td>113.0</td>\n",
       "      <td>3.85</td>\n",
       "      <td>3.49</td>\n",
       "      <td>0.24</td>\n",
       "      <td>2.18</td>\n",
       "      <td>7.80</td>\n",
       "      <td>0.86</td>\n",
       "      <td>3.45</td>\n",
       "      <td>1480.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>13.24</td>\n",
       "      <td>2.59</td>\n",
       "      <td>2.87</td>\n",
       "      <td>21.0</td>\n",
       "      <td>118.0</td>\n",
       "      <td>2.80</td>\n",
       "      <td>2.69</td>\n",
       "      <td>0.39</td>\n",
       "      <td>1.82</td>\n",
       "      <td>4.32</td>\n",
       "      <td>1.04</td>\n",
       "      <td>2.93</td>\n",
       "      <td>735.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>173</th>\n",
       "      <td>13.71</td>\n",
       "      <td>5.65</td>\n",
       "      <td>2.45</td>\n",
       "      <td>20.5</td>\n",
       "      <td>95.0</td>\n",
       "      <td>1.68</td>\n",
       "      <td>0.61</td>\n",
       "      <td>0.52</td>\n",
       "      <td>1.06</td>\n",
       "      <td>7.70</td>\n",
       "      <td>0.64</td>\n",
       "      <td>1.74</td>\n",
       "      <td>740.0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>174</th>\n",
       "      <td>13.40</td>\n",
       "      <td>3.91</td>\n",
       "      <td>2.48</td>\n",
       "      <td>23.0</td>\n",
       "      <td>102.0</td>\n",
       "      <td>1.80</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.43</td>\n",
       "      <td>1.41</td>\n",
       "      <td>7.30</td>\n",
       "      <td>0.70</td>\n",
       "      <td>1.56</td>\n",
       "      <td>750.0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>175</th>\n",
       "      <td>13.27</td>\n",
       "      <td>4.28</td>\n",
       "      <td>2.26</td>\n",
       "      <td>20.0</td>\n",
       "      <td>120.0</td>\n",
       "      <td>1.59</td>\n",
       "      <td>0.69</td>\n",
       "      <td>0.43</td>\n",
       "      <td>1.35</td>\n",
       "      <td>10.20</td>\n",
       "      <td>0.59</td>\n",
       "      <td>1.56</td>\n",
       "      <td>835.0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>176</th>\n",
       "      <td>13.17</td>\n",
       "      <td>2.59</td>\n",
       "      <td>2.37</td>\n",
       "      <td>20.0</td>\n",
       "      <td>120.0</td>\n",
       "      <td>1.65</td>\n",
       "      <td>0.68</td>\n",
       "      <td>0.53</td>\n",
       "      <td>1.46</td>\n",
       "      <td>9.30</td>\n",
       "      <td>0.60</td>\n",
       "      <td>1.62</td>\n",
       "      <td>840.0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>177</th>\n",
       "      <td>14.13</td>\n",
       "      <td>4.10</td>\n",
       "      <td>2.74</td>\n",
       "      <td>24.5</td>\n",
       "      <td>96.0</td>\n",
       "      <td>2.05</td>\n",
       "      <td>0.76</td>\n",
       "      <td>0.56</td>\n",
       "      <td>1.35</td>\n",
       "      <td>9.20</td>\n",
       "      <td>0.61</td>\n",
       "      <td>1.60</td>\n",
       "      <td>560.0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>178 rows × 14 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        0     1     2     3      4     5     6     7     8      9     10  \\\n",
       "0    14.23  1.71  2.43  15.6  127.0  2.80  3.06  0.28  2.29   5.64  1.04   \n",
       "1    13.20  1.78  2.14  11.2  100.0  2.65  2.76  0.26  1.28   4.38  1.05   \n",
       "2    13.16  2.36  2.67  18.6  101.0  2.80  3.24  0.30  2.81   5.68  1.03   \n",
       "3    14.37  1.95  2.50  16.8  113.0  3.85  3.49  0.24  2.18   7.80  0.86   \n",
       "4    13.24  2.59  2.87  21.0  118.0  2.80  2.69  0.39  1.82   4.32  1.04   \n",
       "..     ...   ...   ...   ...    ...   ...   ...   ...   ...    ...   ...   \n",
       "173  13.71  5.65  2.45  20.5   95.0  1.68  0.61  0.52  1.06   7.70  0.64   \n",
       "174  13.40  3.91  2.48  23.0  102.0  1.80  0.75  0.43  1.41   7.30  0.70   \n",
       "175  13.27  4.28  2.26  20.0  120.0  1.59  0.69  0.43  1.35  10.20  0.59   \n",
       "176  13.17  2.59  2.37  20.0  120.0  1.65  0.68  0.53  1.46   9.30  0.60   \n",
       "177  14.13  4.10  2.74  24.5   96.0  2.05  0.76  0.56  1.35   9.20  0.61   \n",
       "\n",
       "       11      12  0   \n",
       "0    3.92  1065.0   0  \n",
       "1    3.40  1050.0   0  \n",
       "2    3.17  1185.0   0  \n",
       "3    3.45  1480.0   0  \n",
       "4    2.93   735.0   0  \n",
       "..    ...     ...  ..  \n",
       "173  1.74   740.0   2  \n",
       "174  1.56   750.0   2  \n",
       "175  1.56   835.0   2  \n",
       "176  1.62   840.0   2  \n",
       "177  1.60   560.0   2  \n",
       "\n",
       "[178 rows x 14 columns]"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "import  pandas as pd\n",
    "pd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1)#第一个参数是将两个DataFrame合并，axis默认为0，是纵向合并，为1是横向合并"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6c998a75",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
